Сейчас на форуме: bartolomeo, tyns777 (+6 невидимых)

 eXeL@B —› Программирование —› Подключение дизасма OllyDbg к проекту
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 03 марта 2011 09:58
· Личное сообщение · #1

Вопрос простой, основан на моём незнании С. Вот вчера решил к одному проекту прикрутить олькин дизасм, скачанный отсюда: --> Дизасм Двиг <--

Скачал, через #include прилепил заголовочный файл, но пишет, что unresolved external symbol на функции дизассемблирования. Блин, как прицепить это добро к проекту?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 03 марта 2011 10:21 · Поправил: PE_Kill
· Личное сообщение · #2

Не делай себе проблем, возьми лучше медиану. У меня в одном проекте олькин двиг уже почти 5 лет используется, видел бы ты сколько там костылей вставлено, после процедуры дизасма, что оно работало как надо.

ЗЫ Кстати у оли двиг заточен под борланд си, там даже где то написано, что если не в нем собираете то могут быть проблемы. С ходу помню что там в исходнике нужно пофиксить функцию Pow что ли, как то так ну и еще 1 фикс, чтобы в студии собралось. Короче даже на этапе сборки геморой.

-----
Yann Tiersen best and do not fuck





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 03 марта 2011 10:25 · Поправил: ARCHANGEL
· Личное сообщение · #3

PE_Kill
Это было моей первой идеей, но блин (о мои кривые руки) там та же проблема!

Кстати у оли двиг заточен под борланд си, там даже где то написано, что если не в нем собираете то могут быть проблемы. С ходу помню что там в исходнике нужно пофиксить функцию Pow что ли, как то так ну и еще 1 фикс, чтобы в студии собралось. Короче даже на этапе сборки геморой.

Да, в хэлпе есть такое. Вначале я начал собирать - выскочила какая-то ошибка, правда, связанная с тем, что символ какой-то был дважды определён. Я потёр одно определение (#define), и оно норм компилится, пока код функции какой-нибудь не вызываю. Т.е. когда, собственно, надо компилироваться, то оно не компилится

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 03 марта 2011 10:32
· Личное сообщение · #4

Ну с ходу:

В заголовке нужно закоментить

Code:
  1. //#if (char)0xFF!=255
  2. //#error Please set default char type to unsigned
  3. //#endif


В ассемблере вставить функу
Code:
  1. double pow10l( int e )
  2. {
  3.          return pow( (double) 10, (int) e);
  4. }


Вызывается она вот тут
Code:
  1.           if (!isdigit(*asmcmd)) {
  2.             asmerror="Invalid exponent"; scan=SCAN_ERR; return; };
  3.           decimal=0;
  4.           while (isdigit(*asmcmd)) {
  5.             if (decimal<65536L) decimal=decimal*10+(*asmcmd++)-'0'; };
  6.           floating*=pow10l(decimal*base); };


Не помню надо там еще что нет, столько времени прошло.

-----
Yann Tiersen best and do not fuck





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 03 марта 2011 10:37
· Личное сообщение · #5

PE_Kill
Спасибо, конечно, но тут вопрос в другом. Допустим, у меня есть вообще левый проект с заголовком и файлами с кодом (.h + .c/.cpp) Как это дело правильно приинклудить? В гугле только аналогичные вопросы без ответов.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 03 марта 2011 11:07 · Поправил: OKOB
· Личное сообщение · #6

ARCHANGEL пишет:
unresolved external symbol


Видимо проблема как всегда в таких случаях связана с декорированием имен, и проявляется при подключении С-шного кода в С++ (даже когда прога без ООП).
Лечится вставкой перед объявлениями функций в заголовочном файле "extern C" (или перед кажым или группа)

extern "C"
{

int Assemble(char *cmd,ulong ip,t_asmmodel *model,int attempt,
int constsize,char *errtext);
int Checkcondition(int code,ulong flags);
int Decodeaddress(ulong addr,char *symb,int nsymb,char *comment);
ulong Disasm(char *src,ulong srcsize,ulong srcip,
t_disasm *disasm,int disasmmode);
ulong Disassembleback(char *block,ulong base,ulong size,ulong ip,int n);
ulong Disassembleforward(char *block,ulong base,ulong size,ulong ip,int n);
int Isfilling(ulong addr,char *data,ulong size,ulong align);
int Print3dnow(char *s,char *f);
int Printfloat10(char *s,long double ext);
int Printfloat4(char *s,float f);
int Printfloat8(char *s,double d);

}

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 03 марта 2011 11:12 · Поправил: DenCoder
· Личное сообщение · #7

ARCHANGEL пишет:
но пишет, что unresolved external symbol на функции дизассемблирования

Возможные варианты, с которыми сталкивался:
1) нет файла .lib для импорта или в Project Properties\Linker\Input\Additional dependencies не указан файл .lib
2) в заголовке для функции пропущен спецификатор типа __declspec(dllimport)
3) не указана концвенция (__stdcall, __cdecl, __fastcall), в результате по дефолту программа пытается привязаться к функциям как к __cdecl, а они объявлены __stdcall в .lib
4) Число и/или тип аргументов и/или тип возвращаемого значения функции в заголовке не соответствует(-ют) объявленным в .lib

P.S. extern "C" к пункту 2 хотел добавить. Но к __declspec(dllimport) давно привык

-----
IZ.RU





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 03 марта 2011 11:20
· Личное сообщение · #8

OKOB, DenCoder

за extern "C" спасибо, посмотрим, вдруг поможет.

DenCoder
Так в дизасме том и нет никаких .lib для импорта - это ж не динамическая библиотека.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 03 марта 2011 11:26 · Поправил: DenCoder
· Личное сообщение · #9

extern "С" как раз для импорта...

... или если двиг в сорцах и не выполнен в виде отдельного проекта dll... да, может помочь, хотя в этом случае я с такой проблемой не сталкивался без extern "C"...

-----
IZ.RU




Ранг: -0.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 марта 2011 18:14
· Личное сообщение · #10

А медиана это что? Можно ссылочку?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 03 марта 2011 18:19
· Личное сообщение · #11

https://ssl.cracklab.ru/f/action=vthread&forum=12&topic=15991#7

-----
Лучше быть одиноким, но свободным © $me





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 04 марта 2011 10:33
· Личное сообщение · #12

kannabis
--> Mediana <--

вчера опять полвечера медитировал с 2008 студией и медианой (и олькиным двигом), уже и инклудил заголовки, и с-шные файлы добавлял к проекту, и расширение на срр менял. Один хрен - не пашет

И extern "C" добавлял - ничего не вышло. У кого-то вообще получалось юзать медиану в проектах студии?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 04 марта 2011 10:41
· Личное сообщение · #13

На оф сайте пример использования лежит

Code:
  1. Пример использования 
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "mediana.h" //Главный заголовочный файл дизассемблера.
  5.  
  6. #define OUT_BUFF_SIZE 0x200
  7. #define IN_BUFF_SIZE  14231285
  8. #define SEEK_TO       0x0
  9.  
  10. int main(int argc, char **argv)
  11. {
  12.     uint8_t sf_prefixes[MAX_INSTRUCTION_LEN]; //Массив избыточных префиксов.
  13.     unichar_t buff[OUT_BUFF_SIZE]; //Выходной буфер печати инструкции.
  14.     struct INSTRUCTION instr; //Выходная инструкция.
  15.     struct DISASM_INOUT_PARAMS params; //Параметры дизассемблера.
  16.  
  17.     uint8_t *base, *ptr, *end;
  18.     int reallen;
  19.     unsigned int res;
  20.     FILE *fp;
  21.  
  22.     params.arch = ARCH_ALL; //Включая все архитектуры.
  23.     params.sf_prefixes = sf_prefixes; //Подключение массива избыточных префиксов.
  24.     params.mode = DISASSEMBLE_MODE_32; //Режим дизассемблирования.
  25.     params.options = DISASM_OPTION_APPLY_REL | DISASM_OPTION_OPTIMIZE_DISP; //Все опции.
  26.     params.base = 0x00401000; //Базовый адрес первой инструкции.
  27.  
  28.     base = malloc(IN_BUFF_SIZE);
  29.     ptr = base;
  30.     end = ptr + IN_BUFF_SIZE;
  31.  
  32.  
  33.     fp = fopen("asm_com2.bin", "rb");
  34.     fseek(fp, SEEK_TO, SEEK_SET);
  35.     fread(base, IN_BUFF_SIZE, 1, fp);
  36.     fclose(fp);
  37.  
  38.  
  39.     while(ptr < end)
  40.     {
  41.         res = medi_disassemble(ptr, &instr, &params); //Disassemble!
  42.         if (params.errcode)
  43.         {
  44.             printf("%X: fail: %d, len: %d\n", ptr - base, params.errcode, res);
  45.             if (res == 0)
  46.                 res++;
  47.         }
  48.         else
  49.         {
  50.             reallen = medi_dump(&instr, buff, OUT_BUFF_SIZE, DUMP_OPTION_IMM_UHEX | DUMP_OPTION_DISP_HEX); //Эта ф-ия будет описана ниже.
  51.             if (reallen < OUT_BUFF_SIZE)
  52.                 buff[reallen] = 0;
  53.             else
  54.                 buff[OUT_BUFF_SIZE - 1] = 0;
  55.  
  56.             printf("%X: %s\n", ptr - base, buff);
  57.         }
  58.         ptr += res;
  59.         params.base += res; //Высчитываем базовый адрес следующей инструкции.
  60.     }
  61.  
  62.     return 0;
  63. }


-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 04 марта 2011 10:45
· Личное сообщение · #14

Coderess
Та видел я этот файлик, конечно. Но, это ж не проект студии! Как мне, например, в консольный проект, создаваемый визардом, добавить медиану?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 04 марта 2011 10:52
· Личное сообщение · #15

Как вариант-подцепи как lib.
Этим батником собирается lib, можно хыть в pre-build event запихать его.
Code:
  1. cl.exe /c mediana.c dump.c utils.c
  2. lib.exe /NODEFAULTLIB mediana.obj dump.obj utils.obj

В сишник пихается хедер, линкеру кормится lib.

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


Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 04 марта 2011 15:07
· Личное сообщение · #16

Я Си не юзаю, в Си из консоли скомпилякал obj'ы медианы и прикрутил к Delphi проекту. Думаю в си можно так же сделать.

-----
Yann Tiersen best and do not fuck





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 04 марта 2011 18:58
· Личное сообщение · #17

PE_Kill пишет:
в Си из консоли скомпилякал obj'ы медианы и прикрутил к Delphi проекту. Думаю в си можно так же сделать.

Вот это очень востребовано... минихелп бы какой по теме

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 05 марта 2011 13:12
· Личное сообщение · #18

ARCHANGEL ты на чем пишешь? если делфишный вариант то мне BeaEngine понравился, думал на нем даже сделать разгребания мусора в дизасме, остановило нормального ассемблирования, а писать самому пока влом

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: -0.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 05 марта 2011 13:18
· Личное сообщение · #19

К си и delphi подключили, а как подключить к проекту под nasm?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 05 марта 2011 13:35
· Личное сообщение · #20

Так же, как и к любому другому языку, кормить lib/obj линкеру и цеплять хедер в сорцах. С последним и будет основная сложность. Что касается медианы, знаю про наличие её хедеров для С/С++, дельфи и фасм. Для насма нету, походу.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 марта 2011 09:18
· Личное сообщение · #21

Сделал, как сказал Archer, и всё заработало. Сэнкс. Тему закрываю.

-----
Stuck to the plan, always think that we would stand up, never ran.



 eXeL@B —› Программирование —› Подключение дизасма OllyDbg к проекту
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати