首页
社区
课程
招聘
[求助]求改写一小段汇编代码
发表于: 2013-8-2 23:24 5293

[求助]求改写一小段汇编代码

2013-8-2 23:24
5293
DWORD MemAlloc = 0x12345678;
__declspec(naked) void TestA()
{
        __asm
        {
                mov eax, [esp]
                sub eax, 1234h
                test eax, eax
                jne nothing
                mov ebx,334h
                retn

nothing:
                jmp [MemAlloc]
        }
}

现在,有一个基址BaseDll(非固定值),意思就是将“jmp [MemAlloc]”改写成
jmp [MemAlloc + BaseDll]
能否在不改动[MemAlloc + BaseDll]里面的东东达到目的,不知道表达清楚没有,想了很久都没想出来,汇编太菜了

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
2
DWORD MemAlloc = 0x12345678;
DWORD BaseDll;
__declspec(naked) void TestA()
{
  __asm
  {
    mov eax, [esp]
    sub eax, 1234h
    test eax, eax
    jne nothing
    mov ebx,334h
    retn

nothing:
   

    mov eax,BaseDll
    jmp[eax + MemAlloc]
  
  }
IA32指令编码的时候支持寄存器+固定32位偏移,所以理论上可以这样……
}
2013-8-2 23:42
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=phpskycn;1205706]DWORD MemAlloc = 0x12345678;
DWORD BaseDll;
__declspec(naked) void TestA()
{
  __asm
  {
    mov eax, [esp]
    sub eax, 1234h
    test eax, e...[/QUOTE]

谢谢楼上的解答,这样修改看起来可行,不过对于我这个程序实际应用起来不行,真实情况比我说的更复杂点,不好描述。
但是有一个问题是很明显的,就是改写了eax的值,如果[eax + MemAlloc]里面一开始就用到了eax的值也许会出现问题。
2013-8-3 00:12
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
思维定式了,其实没有我想象中那么复杂,解决了,真实问题是某位大牛前段时间发布的NnMapHack,再次感谢2L回答。
2013-8-3 00:25
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
5
额,这个。。。因为看到前面用过eax了。有必要的话push pop一下
汇编其实很简单,多看就明白了
2013-8-4 11:44
0
游客
登录 | 注册 方可回帖
返回
//