eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Medsft (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Написать хедер для ассемблерной статической либы
Посл.ответ Сообщение

Ранг: 7.5 (гость)
Статус: Участник

Создано: 21 октября 2016 18:53 New!
Цитата · Личное сообщение · #1

Мне была нужна легкая библиотека длинной арифметики, и я взял BigLib отсюда. Эта либа написана на асме, поэтому я взялся писать к ней сишний хедер. Пример прототипов функций из этой библиотеки:

Code:
  1. _BigCreate               proto :dword               ; dtValue
  2. _BigDestroy             proto         :dword                    ; pBig
  3. _BigCopy          proto   :dword,:dword                  ; pBig1,pBig2
  4. _BigCompare             proto         :dword,:dword         ; pBig1,pBig2


Я написал такой хедер:

Code:
  1. #ifndef BIGLIB_H
  2. #define BIGLIB_H
  3.  
  4. typedef unsigned long DWORD;
  5.  
  6. extern DWORD BigCreate(DWORD initValue);
  7.  
  8. #endif


и решил проверить его пригодность для проектов в такой программе:

Code:
  1. #include <stdio.h>
  2. #include "biglib.h"
  3.  
  4. #pragma comment(lib, "biglib.lib")
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.          DWORD big = BigCreate(0);
  9. }


Но почему-то линкер ругается на Unresolved external symbol '__BigCreate'. Здесь видно два знака подчеркивания, и я пробовал поиграться с этими знаками (убирать, добавлять), но ничего не помогает. Как правильно написать хедер и заставить эту стиатическую либу работать в сишных программах? В настройках линкера добавил ее, само собой.


Ранг: 111.0 (ветеран)
Статус: Участник

Создано: 21 октября 2016 19:13 New!
Цитата · Личное сообщение · #2

Дак ты тело ф-ции создал ? Хотя бы ради приличия

Ранг: 60.6 (постоянный)
Статус: Участник

Создано: 21 октября 2016 19:41 New!
Цитата · Личное сообщение · #3

https://msdn.microsoft.com/en-us/library/deaxefa7.aspx

Ранг: 7.5 (гость)
Статус: Участник

Создано: 21 октября 2016 19:52 New!
Цитата · Личное сообщение · #4

Знаю про манглинг, но у меня в настройках компилятора выбрано соглашение cdecl и еще я добавил к декларации функции __cdecl, то есть в объектном файле имя BigCreate должно превратиться в _BigCreate и будет совпадать с именем функции в либе.

Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 21 октября 2016 19:59 New!
Цитата · Личное сообщение · #5

Rainbow пишет:

Дак ты тело ф-ции создал ? Хотя бы ради приличия


А зачем? - Тело в lib-файле. Чел хочет прилиноковать его к своей программе.


Ранг: 111.0 (ветеран)
Статус: Участник

Создано: 21 октября 2016 20:11 New!
Цитата · Личное сообщение · #6

dosprog пишет:
А зачем? - Тело в lib-файле. Чел хочет прилиноковать его к своей программе.


Ну значит имена знать надо

| Сообщение посчитали полезным: igorusha36


Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 21 октября 2016 20:36 · Поправил: 21 октября 2016 20:41 dosprog New!
Цитата · Личное сообщение · #7

Rainbow пишет:
Ну значит имена знать надо


Всё известно.

Код должен быть такой:

Code:
  1. #ifndef BIGLIB_H
  2. #define BIGLIB_H
  3.  
  4. typedef unsigned long DWORD;
  5.  
  6.  extern DWORD __stdcall _BigCreate(DWORD initValue);
  7.  
  8. #endif
Code:
  1. #include <stdio.h>
  2. #include "biglib.h"
  3.  
  4. #pragma comment(lib, "biglib.lib")
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8. DWORD big = _BigCreate(0);
  9. }

| Сообщение посчитали полезным: ZeroMemory


Ранг: 1.0 (гость)
Статус: Участник

Создано: 13 ноября 2016 01:59 New!
Цитата · Личное сообщение · #8

а ты в следующий раз, прежде чем такие телеги писать, прикинь, мож через .data всё забадяжить...или через LOCAL...и тебе проще будет и другим поможешь со всяких "сей" соскочить...подумай бро....


Ранг: 314.0 (мудрец)
Статус: Участник

Создано: 14 ноября 2016 14:36 New!
Цитата · Личное сообщение · #9

igorusha36

О чём вы говорите, если есть либа и её нужно заюзать(хотя это какой то изврат - можно obj вылажить), то придётся дефейнить всё, у меня недавно была такая проблема с intel xed - этот мотор поставляется в виде lib и что бы такое заюзать нужно немного поизвращаться.
 eXeL@B —› Программирование —› Написать хедер для ассемблерной статической либы

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS