汇编的helloworld

编程技术  /  houtizong 发布于 3年前   87
在windows下
在装了F:\c\MinGW\lib的情况下

masm,nasm,gas,

test_win.s
.section .dataout_text:    .asciz "hello world".section .text.globl _main_main:    pushl $out_text    call _printf    pushl $0    call _exit

这里用到了c运行时的main,exit,printf函数,因为win32的原因多加了个下划线
3.编译
as test_win.s -o test_win.o -gstabs ld test_win.o -o test_win.exe -LF:/c/MinGW/lib -lcrtdll

-gstabs保留了调试相关的符号表
-LF:/c/MinGW/lib -lcrtdll链接了c运行时,注意mingw路径是我机器上的

调试
gdb test_win.exelb 5ri r

另外查看寄存器可用"i r"指令
★★★★★★★★★★★★★★★★★★
com版本的hello world
test.s
.code16.text    movw %cs, %ax    movw %ax, %ds    movw %ax, %es    movw %ax, %ss         movw $11, %cx    movw $0x1301,%ax    movb $0x07,%bl    movw $0,%dx    movw $outstring,%bp    int $0x10    jmp .outstring:    .asciz "hello world"

注意.code16是很有必要的(2)编译as test.s -o test.o ld test.o -Ttext 0x0100 -o test.exeobjcopy.exe -R .pdr -R .comment -R .note -S -O binary test.exe test.com最后的objcopy将编译后的按binary输出成.com格式的

[另外如果跳过第二部exe生成,直接从.o生成.com也是可以运行的,不过对比发现有1bit的异常引起了输出字符的乱码
具体原因我就不去纠结的探索了,如果修改了那一比特,字符显示就正常了]
另外链接时的-Ttext 0x0100也可以用如下lds文件来控制
SECTIONS
{
. = 0x0100;
.text : {*(.text)}
}
同时链接时的选项应该为-Ttest.lds


此时如果ls -l一下会发现有将近4k之巨,这是因为填充了很多的0,用HxD这样的软件把结尾的0
给干掉再看其大小

参考http://www.cnblogs.com/pingf/archive/2011/03/09/1978263.html

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客