不用标准库生成可执行文件文件

0针对问题

1)x86_64平台 gcc编译错误 Error: unsupported instruction `mov’ 及ld链接错误
2)《程序员的自我修养》中静态链接的ld错误
3)不用标准库生成可执行文件文件

1. 源代码

//Myhello.c
char* str = "Hello world\n";
void print()
{  asm("movl $13, %%edx \n\t"//传入字符串str的长度
        "movl %0, %%ecx \n\t"//传入字符串str的地址
	"movl $0, %%ebx \n\t"//指定字符串打印的输出位标准输出
	"movl $4, %%eax \n\t"//传入系统调用号
	"int $0x80"
	:
	:"r"(str)
	:"edx","ecx","ebx","eax");
}
void exit()
{
	asm("movl $42, %ebx \n\t"
	    "movl $1, %eax \n\t"
	    "int $0x80 \n\t");
}
void nomain()
{
	print();
	exit();
}

2执行代码

gcc -c -fno-builtin myhello.c
1)-fno-builtin禁止gcc的内建函数的优化
2)解决报错,在64位系统需要加-m32
ld -static -m elf_i386 -T Hello.lds -e nomain -o TinyHelloWorld TinyHelloWorld
1)-m elf_i386指定的对象文件.o的合并的方式,这个在/user/include下的某个文件中
2)-T 指定链接方式,自行编写。不写该命令也可以过
3)-e必须加,应该我们没有用标准库,所以需要指定可执行文件的起始地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值