ryan_knight_12吧 关注:47,072贴子:2,775,179
  • 1回复贴,共1

【技术流】问一个SIRE的汇编问题

取消只看楼主收藏回复

最近在照着RK(好多年前)整理的资料学习SIRE,已经完成了一些基本的修改和新增特技(比如骑兵冲锋超过X格时伪报敌军这种简单特技),但是有个修改方法上的问题不太清楚,我也没有RK和羊大的联系方式,只好跑来贴吧问了。
问题是:新增代码要求在0x8Axxxx段加入新代码,但是使用jmp或者call跳转的时候,会发生卡死(不是闪退,就是卡住动不了)。我把call的函数的函数体直接写成c3(ret)也不行,一条就卡死。相反,如果我把call的指令改成5字节的nop就没事,想请问一下这是为什么?
我没学过Intel汇编,全是看RK整理的资料在学,我理解中,jmp和call的写法就是E9/E8后边跟(跳转地址- 当前指令地址 - 5)的16bit 小端序,是这里错了么?然后我是直接用Hex在4Axxxx加入的新增汇编码。
希望有懂的旁友指点一下,正在给韩信写新兵仙特技,被卡在这里很难受hhh


IP属地:北京1楼2018-07-16 16:22回复
    后排@ryan_knight_12 @季子来归🌱 ,实在没学过Intel汇编,照着IDA、整理资料和Intel Instructions Set Guide在自学,问题描述的可能也不是很清楚
    我贴一下我具体改的代码吧,这里是在改疾驰的判定条件。
    原:
    00593B98: 8a 8f c9 00 00 00 - mov cl,[edi+000000c9] 取我方攻击
    00593B9E: 3a 8b c9 00 00 00 - cmp cl,[ebx+000000c9] 取敌方攻击
    改后:
    00593B98- E8 EB 68 31 00 - call 008AA488
    00593B9D - 83 F8 08 - cmp eax, 8 // 冲锋格数是否≥8。这行是有问题的,因为没有设置ecx等寄存器,但是重点不在功能对不对,在于会卡死。
    00593BA0 - 0F 1F 40 00 NOP // 与后文对齐
    00593BA4: 76 40 - jna 00593be6 // 与源程序相同,以下都未改过
    这里的问题就在于,就算把008AA488给改成只有一个c3,照样会卡死,但是把00593B98这一行改成NOP就没事。


    IP属地:北京2楼2018-07-16 16:27
    回复(5)