Quantum Я попытался вызвать на фасме по ординалу MessageBoxA с помощью твоей либы,так и не понял, как с ней работать!
EvilsInterrupt Конкретно на Фасме есть как-бы более простой способ вызвать функцию по ординалу без использования ImpLib Тем не менее, если уж ты решил использовать линкер, то всё просто: 1. Создаём скрипт (newuser32.def): Code (Text): include 'implib.inc' implib user32.dll, ord.477, _MessageBoxA@16 endlib 2. Компилируем: Code (Text): fasm newuser32.def newuser32.lib 3. Делаем простенькое тестовое приложение (test.asm): Code (Text): format MS COFF ; Win32 API extrn '__imp__MessageBoxA@16' as MessageBox:DWORD extrn '__imp__ExitProcess@4' as ExitProcess:DWORD section '.text' code readable executable MsgCaption db "FASM",0 MsgBoxText db "Hello, world!",0 PUBLIC _start _start: push 0 push MsgCaption push MsgBoxText push 0 call [MessageBox] push 0 call [ExitProcess] 4. Компилируем: Code (Text): fasm test.asm 5. Линкуем: Code (Text): \masm32\bin\link /SUBSYSTEM:WINDOWS /ENTRY:start /LIBPATH:\masm32\lib test.obj kernel32.lib newuser32.lib Вот и всё. Там же прилагается подробный туториал, только на английском. PS: Забыл добавить, что ординал MessageBox скорее всего разный в разных версиях user32. PPS: Вместо _MessageBoxA@16, __imp__MessageBoxA@16 можно использовать практически любые другие валидные символьные имена, но в данном примере я использовал именно эти для "совместимости" с масмом.
>>Вроде пашет на 2K Sp4 ога очень интересно было узнать, ибо как раз по2к и были сомнения ... еще у кого нить замечания будут ?
EvilsInterrupt Вот это: Code (Text): data import library user32,'USER32.DLL' import user32,\ MessageBox,477 end data
А вот в хексах (вдруг с аттачем глюканет): 4D5A5050681400400050EB2050450000 4C01000068656C6C6F2C20776F726C64 00000F010B01023204000000B80B05D7 77FFD0C302000000000000000C000000 00004000040000000400000004000000 00000000040000000000000064010000 2C010000AFC200000200000000001000
собственно, вот что там: Code (Text): .686p .mmx .model flat ; =========================================================================== ; Segment type: Pure code seg000 segment byte public 'CODE' use32 assume cs:seg000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing db 4Dh ; M db 5Ah ; Z ; --------------------------------------------------------------------------- push eax push eax push 400014h push eax jmp short loc_2C ; user32.MessageBoxA ; --------------------------------------------------------------------------- db 50h ; P db 45h ; E db 0 db 0 db 4Ch ; L db 1 db 0 db 0 aHelloWorld db 'hello, world',0 db 0 db 0Fh db 1 db 0Bh db 1 db 2 db 32h ; 2 db 4 db 0 db 0 db 0 ; --------------------------------------------------------------------------- loc_2C: ; CODE XREF: seg000:0000000Aj mov eax, 77D7050Bh ; user32.MessageBoxA call eax retn ; --------------------------------------------------------------------------- db 2 db 0 db 0 db 0 db 0 db 0 db 0 db 0 db 0Ch db 0 db 0 db 0 db 0 db 0 db 40h ; @ db 0 db 4 db 0 db 0 db 0 db 4 db 0 db 0 db 0 db 4 db 0 db 0 db 0 db 0 db 0 db 0 db 0 db 4 db 0 db 0 db 0 db 0 db 0 db 0 db 0 db 64h ; d db 1 db 0 db 0 db 2Ch ; , db 1 db 0 db 0 db 0AFh ; п db 0C2h ; T db 0 db 0 db 2 db 0 db 0 db 0 db 0 db 0 db 10h db 0 seg000 ends end
asd проверил твой Мессагбокс и увидел , что у тебя же ещё есть вариант для сжатия Sections Alignment - 1000 File Alignment - 200 Интересно почему ты этим принебрег ??? Хотя в том Мессагбоксе "Привет,мир" на 133 байта - это реализовано Sections Alignment - 4 File Alignment - 4