王爽汇编语言综合研究-不用main函数编程

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

这一部分继续深入研究用汇编解释c的原理,尝试不用main()函数编写可以正确运行的程序

1、首先编写一个简单的程序

f()
{
	*(char far *)(0xb8000000+160*10+80) = 'a';
	*(char far *)(0xb8000000+160*10+81) = 2;
}

在TC中编译,连接这个程序。出现了一个连接错误

Snap16

Linker Error:Undefined symbol ‘_main’in module C0S(未定义的符号_main在模块C0S中)

这句话说明,c语言的入口函数main函数是被C0S.obj所调用。

现在我们用汇编语言所使用的连接器Link.exe来连接c语言编译后的.obj文件得到一个.exe文件,用debug调试这个.exe文件

Snap17

从反编译后的指令看到,偏移地址为0开始的程序就是我们编写的程序。在资源管理器中看到,这个文件只有541个字节。但是执行后不能正确返回

2、正常的程序

下面编写一个正常的程序

m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值