【问题标题】:Access violation on `jmp` to appended segment对附加段的“jmp”访问冲突
【发布时间】:2016-12-02 16:29:45
【问题描述】:

所以我使用 CFF Explorer 将代码部分添加到 .exe 文件中。我已将部分特征设置为0x60000020(可执行、可读、包含代码)并使用 IDA 在其中创建了一些虚拟代码。

但是,当我从原始 .text 段向该代码注入 jmp 时,我得到的只是访问冲突。我使用 IDA 修补二进制文件,因此它为我生成了偏移量,但它似乎是正确的:

jmp     far ptr 6:75D100h

生成的操作码看起来也不错:

EA 00 D1 75 00 06 00

但是当我跳到那个位置时——“指令在 0xFFFFFFFF 处引用了内存,无法读取内存”。我对偏移量进行了一些试验,但无济于事;附加段似乎已正确加载到内存中。

如果有任何提示我在这里缺少什么,我将不胜感激:)

【问题讨论】:

  • 是什么让您认为6 是正确的段选择器?
  • @Jester 事实上,它不是 - 看起来正确的是 5 - 但段错误仍然存​​在。我不知道为什么 IDA 把 6 放在那里,谢谢
  • 5 看起来也很可疑。如果你在 LDT 中分配了一个新的描述符,7 可以工作。
  • 更好的问题是,为什么需要一个新的选择器?为什么需要跳远?
  • 输入 jmp near ptr 75d100h 应该让 IDA 使用正确的近距离跳转。

标签: windows assembly x86 exe ida


【解决方案1】:

只是将其标记为已回答-@Jester 和@RossRidge 提出的解决方案是删除jmp far。使用

jmp     near ptr 75D100h

修复一切。不得不说 IDA 的行为可能有些古怪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多