首页
社区
课程
招聘
[旧帖] [求助]谁解释一下 e911223344 jmp 27b09246 0.00雪花
发表于: 2010-5-19 05:44 3750

[旧帖] [求助]谁解释一下 e911223344 jmp 27b09246 0.00雪花

2010-5-19 05:44
3750
lkd> u e37d7030
e37d7030 e911223344      jmp     27b09246
e37d7035 68707e7de3      push    0E37D7E70h

e37d7030   11223344    27b09246 这几个值怎么算的?

谢谢.

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
这让我如何回答
2010-5-19 08:01
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
e37d7030 e911223344      jmp     27b09246

e37d7030  是本条指令的地址
e911223344    是本条指令的机器码
     e9可以翻译成 jmp(这样不太准确,但是容易理解)
     11223344   就应该翻译成  27b09246了
如何翻译?
当前指令的地址(0xe37d7030) + 当前指令长度(0x5)+ 偏移(0x44332211) = 0x27b09246

至于为什么是 0x44332211 而不是 0x11223344 那是因为我们常用的window平台都是小端模式
即 低字节在低地址   高字节在高地址
下面是之前写的反汇编引擎的解析 0xe9部分的代码

	//jmp
	case 0xE9:
		pInstruction->opcode[0] = 1;
		pInstruction->opcode[1] = *pCurCode;
		lstrcpy(pInstruction->szAsm, "JMP ");
		pCurCode++;
		if (pInstruction->bPrefixes66)
		{
			pInstruction->immediate[0] = 2;
			memcpy(pInstruction->immediate+1, pCurCode, 2);
			wsprintf(pTemp1, _T("%.8X"), ((dwCurrentAddress + 4)&0x0000FFFF) + *(short int *)pCurCode);
		}
		else
		{
			pInstruction->immediate[0] = 4;
			memcpy(pInstruction->immediate+1, pCurCode, 4);
		[COLOR="Blue"]	wsprintf(pTemp1, _T("%.8X"), (dwCurrentAddress + 5) + *(int *)pCurCode);	[/COLOR]		
		}
		break;
2010-5-19 12:12
0
雪    币: 138
活跃值: (461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢指导...
2010-5-19 21:49
0
游客
登录 | 注册 方可回帖
返回
//