替换入口点windows的地址只能在调试器下工作
我试图理解PE在windows下是如何工作的,因此我将沿着写封隔器的路线走下去。 所以我取了入口点的地址,它指向_mainCRTStartup,并用一个指向“jmp _mainCRTStartup”的值替换它。 当我在调试器下运行它时,我的程序运行正常,但如果我只是在没有调试器的情况下启动可执行文件,它会崩溃,并且我无法在崩溃后附加调试器,调试器会说它无法附加到崩溃进程 我想我的问题是:我的方法是否有效?如果是,我可以尝试解决此问题吗 谢谢替换入口点windows的地址只能在调试器下工作,windows,debugging,assembly,packer,Windows,Debugging,Assembly,Packer,我试图理解PE在windows下是如何工作的,因此我将沿着写封隔器的路线走下去。 所以我取了入口点的地址,它指向_mainCRTStartup,并用一个指向“jmp _mainCRTStartup”的值替换它。 当我在调试器下运行它时,我的程序运行正常,但如果我只是在没有调试器的情况下启动可执行文件,它会崩溃,并且我无法在崩溃后附加调试器,调试器会说它无法附加到崩溃进程 我想我的问题是:我的方法是否有效?如果是,我可以尝试解决此问题吗 谢谢 Max结果一切正常,我忘了处理反调试例程中的异常,如果
Max结果一切正常,我忘了处理反调试例程中的异常,如果没有在调试器中运行,该异常会使exe崩溃。OEP?你是指AddressOfEntryPoint字段吗?没错,我认为OEP代表原始入口点。确保使用的是相对于可执行文件实际加载地址的a值(通常是值ImageBase)。因此,如果内存中的实际入口点应为0x401570,ImageBase为0x400000,则该值应为0x1570。是的,它使用的是正确的相对地址,但我无法理解的是,为什么它在调试器下工作,而不是没有调试器。。。