IDA Pro - 修改JMP指令时出错


1

我是ASM的新手。在64位可执行文件中使用IDA Pro 6.8。

我不能修改的jmp地址指令:

........ 
    .text:0000000141BAFB57 loc_141BAFB57:       
    .text:0000000141BAFB57     lea  rcx, [rbp+520h+var_20] 
    .text:0000000141BAFB5E     lea  rdx, abc_data 
    .text:0000000141BAFB65     call sub_141CCAC80 
    .text:0000000141BAFB6A     jmp  loc_141BAF9D6 
    .text:0000000141BAFB6A subroutine endp 
    .text:0000000141BAFB6A 
    .text:0000000141BAFB6F 

我想要么改变从loc_141BAF9D6到loc_141BAFA9C或者干脆NOP指令的JMP地址...

每次我试图在IDA Pro 6.8中将jmp(或nop)指令移动到子程序endp关闭之外,因此IDA现在给我一个SP分析失败的错误...例如:

.text:0000000141BAFB57 loc_141BAFB57:       
.text:0000000141BAFB57     lea  rcx, [rbp+520h+var_20] 
.text:0000000141BAFB5E     lea  rdx, abc_data 
.text:0000000141BAFB65     call sub_141CCAC80 
.text:0000000141BAFB65 subroutine endp ; sp-analysis failed 
.text:0000000141BAFB65 
.text:0000000141BAFB6A     jmp  loc_141BAFA9C 
.text:0000000141BAFB6F 

我试过编辑指令通过编辑>修补程序组装,直接在十六进制视图中,使用IDAPatcher,并使用Fetanyl插件...它总是移动endp语句之外的指令,打破代码...

这是不可能的一般或我做错了什么?

我试过OllyDbg但它并没有打开64位文件...

1

这是可能的。我认为它是IDA中的错误(编辑函数的最后一条指令将它从函数中移除,我成功地重现了这种行为),但是可以在修补后修复函数来解决它。

最简单的方式做到这一点如下:

  1. 做修补
  2. 光标放置到从IDA - 视图 - 窗口(常规装配窗口)
  3. 功能删除指令后
  4. 并按下E键。这将定义当前指令的功能结束,这意味着它到达之前的地址。

您可以通过编辑功能特性的功能结束地址对话框(编辑 - >函数 - >编辑功能或Alt键-P这样做。 祝你好运。