【问题标题】:Replacing Address of entry point windows works only under a debugger替换入口点窗口的地址仅在调试器下有效
【发布时间】:2016-03-15 18:16:21
【问题描述】:

我正在尝试了解 PE 在 Windows 下的工作原理,因此我正在编写打包程序。 因此,我获取了指向 _mainCRTStartup 的入口点地址,并将其替换为指向“jmp _mainCRTStartup”的值。 当我在调试器下运行它时,我的程序运行良好,但如果我只是在没有调试器的情况下启动可执行文件,它会崩溃并且我无法在崩溃后附加调试器,调试器会说它无法附加到崩溃进程。

我想我的问题是:我的方法应该奏效吗?如果是这样,我可以尝试解决此问题吗?

谢谢,

最大

【问题讨论】:

  • OEP?您的意思是 AddressOfEntryPoint 字段?
  • 没错,我认为OEP代表Origin Entry Point。
  • 确保您使用的是相对于可执行文件的实际加载地址的值(通常是 ImageBase 值)。因此,如果内存中的实际入口点应该是 0x401570 而 ImageBase 是 0x400000,那么值应该是 0x1570。
  • 是的,它使用了正确的相对地址,我不明白为什么它可以在调试器下工作,但不是没有...

标签: windows debugging assembly packer


【解决方案1】:

事实证明一切正常,我忘记处理反调试例程中的异常,如果它不在调试器中运行,则会导致 exe 崩溃。

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    相关资源
    最近更新 更多