Привет подскажите как в тасме под Винду сделать секцию кода ERW? Чтобы когда записываю значение в переменную объявленную в секции кода не вылетала ошибка?
а более подробно можете подсказать? допустим есть Код (Text): .386p .model flat extrn MessageBoxA:PROC extrn ExitProcess:PROC .data pTitle db "Hi",0 .code msg: mov pMsg,"dsss" push 0 push offset pTitle push offset pMsg push 0 call MessageBoxA pMsg db ? push 00h call ExitProcess end msg
temi4 В общем вот: BOOL WINAPI VirtualProtectEx( __in HANDLE hProcess, //Это получаем через GetCurrentProcess() __in LPVOID lpAddress, //Указатель на блок памяти,в вашем случае в CS надо посмотреть по идее если изменять аттрибуты для всей секции .code. В ASMе точно не знаю. //Хотя если только для одной переменной,то addr pMsg может прокатить как указатель. __in SIZE_T dwSize, //Размер,тут все ясно,в случае одной переменной,а для всего .code сразу и не скажу. __in DWORD flNewProtect, //Это смотреть здесь http://msdn.microsoft.com/ru-ru/library/aa366786(v=VS.85).aspx __out PDWORD lpflOldProtect ); На счет lpflOldProtect - извиняюсь ошибся. Здесь просто передай соответствующий указатель - переменная принимает старые аттрибуты защиты. Add: На счет размера .code - надо смотреть PE-заголовок,там таблица секций есть. Почитай Ic'zeliona PE-формат. А лучше защити только одну переменную. С PE не помогу - я сам новичок))).
Код (Text): .386p .model flat extrn MessageBoxA:PROC extrn ExitProcess:PROC extrn GetCurrentProcessId:PROC extrn VirtualProtectEx:PROC .data pTitle db "Hi",0 total size equ (offset msg_end - offset msg_start) mm dd ? .code msg: msg_start label byte call GetCurrentProcessId push mm push 40h push total_size push offset msg_start push eax call VirtualProtectEx mov pMsg,"dsss" push 0 push offset pTitle push offset pMsg push 0 call MessageBoxA pMsg db ? push 00h call ExitProcess msg_end label byte end msg усли я все правильно понял, то должно быть так, но возвращает ERROR_NOACCESS после вызова VirtualProtectEx Что не так?
Sorry, temi4 - indeed it doesn't. Please try GetCurrentProcess (with no "Id") (should return -1) and your example should work.