为什么没有编译器debug也可以运行汇编代码?
debug自带编译器吗? 源码经过编译器编译生成可执行文件,debug程序加载可执行文件进行调试,这是一般的流程。你说的是源码调试,这个底层怎么实现我还不了解 楼主完全搞错了,在 DOS 时代,编译器不多,很多时候,人们不得不用汇编语言开发应用程序,如何找到编译好的程序中存在的问题,当然是通过实际运行、跟踪和调试程序,debug 就是 DOS 操作系统标配的可执行程序跟踪调试器。 jackz007 发表于 2022-5-15 09:27楼主完全搞错了,在 DOS 时代,编译器不多,很多时候,人们不得不用汇编语言开发应用程序,如何找到 ...
我知道,debug可以调试程序,但是debug上不是也可以直接把汇编指令写入内存吗?这些汇编指令不用经过编译吗?
debug 只有指令级的汇编和反汇编功能,但是,仅限于内存映像,可以修改 .exe 的内存映像,不能直接修改 exe 文件,不能编译源代码文件。 jackz007 发表于 2022-5-15 21:24
debug 只有指令级的汇编和反汇编功能,但是,仅限于内存映像,可以修改 .exe 的内存映像,不能直接 ...
exe可执行文件读取到内存中就相当于创建了一个独立的副本?然后用debug修改的是这个副本而不是原来的exe文件,是这个意思吧? 本帖最后由 jackz007 于 2022-5-20 11:28 编辑
exe 文件是由文件头和内存映像两部分构成,其中,文件头定义了程序入口的 CS : IP、堆栈 SS : SP,还有就是数量可变的一系列重定位项。exe 在加载到内存的时候,操作系统会根据文件头中的信息初始化 CS : IP 以及 SS : SP 的数值,并将加载基址的数值加到内存中的每一个重定位项上,这些重定位项都是内存地址,实际上是汇编指令的操作数。exe 文件加载到内存后,实际上只是 exe 文件的内存映像部分,文件头内容并没有直接进入到内存,所以,虽然我们可以用 debug 修改 exe 文件的内存映像,却始终无法直接将这些改变回写入 exe 文件,道理就在这里。
其实,用 debug 修改 exe 文件也是有办法的,首先,需要将 .exe 的文件扩展名去掉,这样,就可以将 exe 文件整个加载到 debug,这个时候,再修改汇编指令就可以保存了。保存完毕后,将文件名改回 .exe 即可。当然,用这种方法修改 exe 文件需要丰富的经验和扎实的汇编功底,否则,你连代码入口都找不到。 没看明白 说的什么意思呢 cjy1986823 发表于 2022-5-20 11:15
没看明白 说的什么意思呢
刷新一下网页试试。 jackz007 发表于 2022-5-20 11:31
刷新一下网页试试。
好的,谢谢
页:
[1]