vs2019处理extern方式多模块过程的细节
第一次写x86高级过程,调试了好久才处理好。
在vs2019中,使用extern的方式组建多模块程序,enter和leave指令是多余的。汇编器自动生成了堆栈帧:自动保存并设置了ebp的值,还会帮你生成leave指令。最后,汇编器生成的ret指令是不带参数的。
和单模块程序不同,在main过程中,push OFFSET Array给extern外部过程传递堆栈参数的结果不再是.data段的偏移量,例如0或12这样的,而是一个0x00406000的绝对内存地址。这说明,vs2019在调试运行时程序是绝对加载的,它每次都被加载到一个固定的内存位置。