问个C++内存相关问题
初学者,望大神们不吝赐教比如如下一个C++定义修改内存的的宏代码
patch(0x406B53,"\x90\x8B\x09");
patch(0x2A0930,"\xD2");
如上代码中,前面应该是偏移量,后面的我猜猜是把0变1或者1变0的过程,但是具体如“\XD2”看不懂。为什么要加引号,以及XD2是代表高位还是低位?百度查了半天找不到相关内容
如有错误请指正
有的哪个大神来详细告诉下{:soso_e183:}
vc不懂易语言我可以教你 我只拿成品 其他不懂 \x后面跟的是字节码
汇编指令在内存中都是以字节码形式存在
比如汇编的nop指令,对应字节码为\x90
那么\x90\x8B\x09即为将该处的汇编指令替换为
nop
mov ecx,
当然有时候还要结合该处上下文来看
有个工具叫Asm2MachineCode就是用于汇编指令和机器码转换的 比如如下一个C++定义修改内存的的宏代码
patch(0x406B53,"\x90\x8B\x09");
patch(0x2A0930,"\xD2"); 其实玩儿过OD就很容易理解了。
0x406B53,"\x90\x8B\x09"
前面的是内存地址,之后\x90\x8B\x09的是二进制代码
估计这个内存地址是个关键跳转。00424FFB /75 08 jnz short CCMClien.00425005
00424FFD |6A 10 push 0x10
00424FFF|. |E8 B2000000 call CCMClien.004250B6
00425004|. |59 pop ecx
00424FFB 90 nop ;此处nop掉后,跳转就无效了
00424FFC 90 nop
00424FFD 6A 10 push 0x10
00424FFF|.E8 B2000000 call CCMClien.004250B6
00425004|.59 pop ecx
00425005|>33F6 xor esi,esi
0X表示16进制,后面的数字是机器码,看看汇编怎么转换机器码的资料就很容易理解了 你就理解成0x90形势就行了:P 加引号是因为patch函数第二个要求的是字符串的参数,因为要用字符串填充内存。 :o小白来看看
页:
[1]