![]() |
|
|
![]()
|
|
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
Проблема вот в чем заклячается:
Мне надо вызвать на асме API функцию, но для этого НЕ ИСПОЛЬЗОВАТЬ ДОПОЛНИТЕЛЬНЫЕ *.LIB И *.INC. Одним словом, кто знает код вызова API на частом асмовском языке. Поясняю: Этот код мне надо вставить в проект Delphi, вот для чего я пишу не использовать различные доп функции например invoke и т.д., так как это Delphi не понимает! ПОМОГИТЕ ПОЖАЙЛЕСКА КАК МОЖНО БЫСТРЕЕ, А ТО МНЕ СРОЧНО НАДО!!! ВСЕМ ЗАРАНЕЕ БЛАГОДАРЕН!!!! |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Не очень понял.
Если ты в дельфи используешь какие-нибудь ф-ции из kernel32.dll, user32.dll и т.п., то ничего не мешает вызывать их и из асм-вставок. Т.е. если ты написал там что-то вроде uses kernel.tpu (я на дельфи не пишу, поэтому сказать не могу точно), то все функции из нее тебе должны быть доступны. Посмотри в хелпе, примерах и т.п. На самом деле вызов тех или иных апи - ничего более, чем размещение в определенной секции импорта заголовка экзешника 1) имени нужной dll; 2) ф-ций из этой dll. При запуске винда сама поймет, что ты хочешь использовать и заменит эти символьные имена на адреса нужных функций. После этого приложение может вызывть эти ф-ции через jmp или call. Нажми F4 на экзешнике и увидишь. Быввет так, что по каким-то причинам это сделать нельзя, т.е. нельзя писать в хидере экзешника в таблицу импорта имена функций и подключаемых dll. Это может быть по разным причинам. Например, вирусу может быть тяжело корректировать экзешник или обычный vb-код поступает так: само приложение минимально (может быть 10 килобайт) и оно экспортирует одну лишь апи - kernel32.dll, LoadLibaryA. Благодаря этой апи оно всегда требует подключения здоровенной vb'шной dll порядка 5-ти метров, которая уже внутри себя вызывает виндовые апи. Всегда можно по имени dll и имени апи в ней вызвать эту апи из нее, даже без подключения этой dll в проект (экзешник). Для этого достаточно экспортировать всего пару апи:
Если уже совсем все плохо, то можно сделать call на абсолютный адрес, те рискуя потерять переносимость от одной версии винды к другой. Например, опытным путем ты выяснил, что точка входа в CreateFileA - 7F000000h. Во всех версиях винды call на этот адрес приведет к правильному вызову этой апи. Если же винда с другой версией - то все, амба. В nt-моделях винды (типа xp вроде) можно юзать системный вызов Int 2Eh, вроде это то же самое. параметров я не скажу, но найти не проблема.... -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
kostik_16, если на Delphi - то, как сказал Chingachguk, подключаешь нужный юнит. А для вызова нужной функции запоминай на стеке параметры, а потом делай call FunctionName.
Пример:
Только не запутайся с порядком параметров: тот параметр, который в описании функции идет первым, должен сохраняться в стеке в последнюю очередь... -------------------- С уважением, г-н Посол. |
|||
|
||||
| kostik_16 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
|
||||
|
|||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Переделал под Delphi, но т.к. я не особый знаток асма, возникли такие вопросы:
1)прога подразумевает запись в сегмент кода ? Хм... 2)что за структуры sSEH и CONTEXT ? 3)чему равны константы MIN_KERNEL_SEARCH_BASE и MAX_API_STRING_LENGTH 4)в коде есть переходы на неопределенные метки (@Quit, @@BadExit, @@ExitProc) Такие вопросные места отмечены как
-------------------- С уважением, г-н Посол. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
как длинно все раписали вы
вот без SEH делает сами оптимизируйте лениво мне start: pop eax push eax call findkbase call get_f mov esi,fname call findfunc mov [fadr],ebx mov esi,fname1 call findfunc mov [fadr1],ebx push user32 call dword [fadr] mov [userhdr],eax push fname2 push eax call dword [fadr1] push 0 push fname push fname push 0 call eax ret findfunc: xor ebx,ebx mov edi,[fname_base] fnd2: mov eax,[esi] cmp [edi],eax jz stest fnd: cmp [edi], byte 0 jz fnd1 inc edi jmp fnd fnd1: inc edi inc ebx jmp fnd2 stest: push esi push edi stesta: mov al,[esi] cmp [edi],al jnz stest1 cmp al,0 jz yes inc edi inc esi jmp stesta stest1: pop edi pop esi jmp fnd yes: pop edi pop esi shl ebx,2 mov edi,[fadr_base] add edi,ebx mov ebx,[edi] add ebx,[kernel_base] ret get_f: mov esi,[eax+78h] add esi,[kernel_base] add esi,20h mov esi,[esi] add esi,[kernel_base] mov esi,[esi] add esi,[kernel_base] mov [fname_base],esi mov esi,[eax+78h] add esi,[kernel_base] add esi,1ch mov esi,[esi] add esi,[kernel_base] mov [fadr_base],esi ret findkbase: shr eax,6 mov edx,64 mul edx mov bx,'MZ' next: cmp [eax],word bx jz found sub eax,64 jmp next found: mov [kernel_base],eax mov ebx,[eax+3ch] add eax,ebx mov [pe_hdr],eax ret fname: db 'LoadLibraryA',0 fname1: db 'GetProcAddress',0 fname2: db 'MessageBoxA',0 fadr: dd 0 fadr1: dd 0 fadr2: dd 0 user32: db 'user32.dll',0 userhdr: dd 0 kernel_base: dd 0 pe_hdr: dd 0 fname_base: dd 0 fadr_base: dd 0 -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
oleg1973, если знаешь структуру SEH и CONTEXT, то распиши - уже не раз их встречал, и нигде не описано что там внутри......
-------------------- С уважением, г-н Посол. |
|||
|
||||
| guest__ |
|
||||
|
Unregistered |
из библы MSVCRT.DLL |
||||
|
|||||
| Guest |
|
|||
|
Unregistered |
блин только щас дошло что без invoke и лишних inc (((
|
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |