Доброго времени суток. Хотелось бы узнать на счет такой программки, как вот сдесь в низу. Она затирает код int 20h и ставит на его место 9090h( nop nop) и продолжает выполнять код. Код (Text): CSEG segment assume cs:CSEG, es:CSEG, ds:CSEG, ss:CSEG org 100h Begin: mov sp,offset Lab_1 mov ax,9090h push ax int 20h Lab_1: mov ah,9 mov dx,offset Mess int 21h mov ax,1h int 16h int 20h Mess db 'This wery good!$' CSEG ends end Begin Теперь вопрос почему тотже трюк не выходит под WinApi Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\Kernel32.inc includelib \masm32\lib\Kernel32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib .DATA MessageGood db 'Получилось',0 .CODE start: mov esp,offset Lab_1 mov eax,90909090h push eax nop invoke ExitProcess,0 Lab_1: invoke MessageBox,0,addr MessageGood,addr MessageGood,MB_OK invoke ExitProcess,0 END start
Ну во-первых invoke ExitProcess,0 больше, чем четыре байта, а во-вторых чтобы писать в код нужно, чтобы секция кода имела разрешение для записи, чего, я так подозреваю, тоже нет.