opencl26
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору вы воюете с ветряными мельницами, вот такой вариант правильный Код: #include<stdio.h> #include<stdlib.h> #include<memory.h> #include <windows.h> #define SELF_SIZE ((int)x_self_mod_end-(int)x_self_mod_code) __declspec(naked)int x_self_mod_code(int a,int b) { __asm { begin_sm: mov eax,[esp+4] call get_eip get_eip: add eax,[esp+8+4] pop edx xor byte ptr[edx],28h ret } } void x_self_mod_end(){}; int main() { int a; int (__cdecl*self_mod_code)(int a,int b); //self_mod_code(4,2); //self_mod_code[SELF_SIZE]; //self_mod_code=(int (__cdecl*)(int,int))malloc(SELF_SIZE); self_mod_code=(int (__cdecl*)(int,int))VirtualAlloc(NULL, SELF_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE); memcpy(self_mod_code,x_self_mod_code,SELF_SIZE); for(a=1;a<10;a++)printf("%02X",self_mod_code(4,2)); printf("\n"); VirtualFree(self_mod_code, 0, MEM_RELEASE); return 0; } | остальное - проблемы реализации компилятора, а их может миллион поверьте, вы не ту дорогу одолеваете.. | Всего записей: 319 | Зарегистр. 17-09-2014 | Отправлено: 14:06 17-07-2015 | Исправлено: opencl26, 14:08 17-07-2015 |
|