这一部分继续深入研究用汇编解释c的原理,尝试不用main()函数编写可以正确运行的程序
1、首先编写一个简单的程序
f() { *(char far *)(0xb8000000+160*10+80) = 'a'; *(char far *)(0xb8000000+160*10+81) = 2; }
在TC中编译,连接这个程序。出现了一个连接错误
Linker Error:Undefined symbol ‘_main’in module C0S(未定义的符号_main在模块C0S中)
这句话说明,c语言的入口函数main函数是被C0S.obj所调用。
现在我们用汇编语言所使用的连接器Link.exe来连接c语言编译后的.obj文件得到一个.exe文件,用debug调试这个.exe文件
从反编译后的指令看到,偏移地址为0开始的程序就是我们编写的程序。在资源管理器中看到,这个文件只有541个字节。但是执行后不能正确返回
2、正常的程序
下面编写一个正常的程序
main() { *(

本文深入探讨了如何在汇编语言中编写不依赖main函数的程序。通过分析C编译系统的工作原理,理解了C0S模块在程序执行中的角色,特别是其初始化和程序返回的流程。作者通过创建自定义的C0S.obj文件,成功实现了不调用main函数的程序执行,从而展示了如何绕过标准入口点直接执行用户代码。


最低0.47元/天 解锁文章
6115

被折叠的 条评论
为什么被折叠?



