1

没有太多使用 memcpy,但这是我的代码不起作用。

memcpy((PVOID)(enginebase+0x74C9D),(void *)0xEB,2);

(enginebase+0x74C9D) 是指向我要修补的字节地址的指针位置。

(void *)0xEB 是我想要的那种 jmp 的操作码。

唯一的问题是,这会在线路尝试运行的那一刻崩溃,我不知道我做错了什么,有什么煽动吗?

4

2 回答 2

1

论点(void*)0xEB是从地址复制内存0xEB;大概你想要更像的东西

unsigned char x = 0xEB;
memcpy((void*)(enginebase+0x74c9d), (void*)&x, 2);

为了正确地将0xEB 复制到目标。顺便说一句,将单个字节复制到程序存储器的正确值是 2 吗?看起来应该是 1,因为您要复制 1 个字节。我也假设你不能只是做

((char*)enginebase)[0x74c9d] = 0xEB; 

由于某些原因?(我没有任何故意覆盖程序内存的经验)

于 2010-03-18T03:09:18.180 回答
0

memcpy()期望源缓冲区和目标缓冲区有两个指针。您的第二个参数不是指针,而是数据本身(它是jnz的操作码,正如您所描述的那样)。如果我正确理解您要执行的操作,则应设置一个以操作码为内容的数组,并为memcpy()提供指向该数组的指针。

程序崩溃 b/c 您尝试从分配的空间(地址 0xEB)中引用内存位置。

于 2010-03-18T03:08:53.240 回答