Code:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int i = 1;
void (__cdecl *test_fun )(int *);
char *fun;
fun = (char *) malloc(1024);
// mov eax, DWORD PTR [esp+4]
fun[0] = 0x8b;
fun[1] = 0x44;
fun[2] = 0x24;
fun[3] = 0x04;
// inc DWORD PTR [eax]
fun[4] = 0xff;
fun[5] = 0x00;
// ret
fun[6] = 0xc3;
// nop, za svaki slucaj, nije neophodno...
fun[7] = 0x90;
fun[8] = 0x90;
fun[9] = 0x90;
test_fun = (void (__cdecl *)(int *)) fun;
fprintf(stderr, "before test i = %d.\n", i);
test_fun(&i);
fprintf(stderr, " after test i = %d.\n", i);
free(fun);
}
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int i = 1;
void (__cdecl *test_fun )(int *);
char *fun;
fun = (char *) malloc(1024);
// mov eax, DWORD PTR [esp+4]
fun[0] = 0x8b;
fun[1] = 0x44;
fun[2] = 0x24;
fun[3] = 0x04;
// inc DWORD PTR [eax]
fun[4] = 0xff;
fun[5] = 0x00;
// ret
fun[6] = 0xc3;
// nop, za svaki slucaj, nije neophodno...
fun[7] = 0x90;
fun[8] = 0x90;
fun[9] = 0x90;
test_fun = (void (__cdecl *)(int *)) fun;
fprintf(stderr, "before test i = %d.\n", i);
test_fun(&i);
fprintf(stderr, " after test i = %d.\n", i);
free(fun);
}
Pozdrav, To3A