NASM GCC混合编译16位二进制文件。。。。
来源:互联网 发布:小蜜蜂数控切割机编程 编辑:程序博客网 时间:2024/05/23 10:13
本文重点只是介绍怎么使用GCC和NASM混合编译16位的纯二进制文件,包括汇编调用C函数 C调用汇编。。。
编译环境:Windows,所以linux下的朋友不需要MinGW
1.MinGW
//GCC
__asm__(".code16gcc\n");
extern int puts(char * str);//申明汇编函数
int main(char * message)
{
return puts(message);
}
;;;nasmextern mainglobalputsglobalentry[bits 16]entry:jmpnext_entry;入口地址@MESSAGE:db'This is the test message !',0x0d,0x0a,0;========================================================================================================================;函数 puts;功能 打印字符串;堆栈:;|-----------------------|;| [ebp+8]| 目标字符串的段地址;| [ebp+4]| 返回地址;| [ebp+0]| --> push ebp;|-----------------------|;========================================================================================================================puts:pushebpmovebp,esppushesipusheaxpushebxmovesi,[ebp+0x08].@1:lodsb; 从 ds:si中读入一个字符到 aloral,al; 检测字符是否为0jz.@2; 显示完毕, 退出过程movah,0x0emovbl,0x09int0x10jmpshort.@1.@2:popebxpopeaxpopebpdb0x66retnext_entry:mov ax,csmov ds,axmov es,axmov ss,axmov sp,0xfff0pushdword@MESSAGEcall dwordmainaddsp,4int0x20
编译命令:
gcc -c -o main.o main.c
nasm -f elf -o entry.o entry.s
ld -s --entry=entry -Ttext=0x7c00 -o example.elf entry.o main.o ;-Ttext=0x7c00 指明将程序装载到内存0x7c00处 --entry=entry 指明入口点
objcopy -I elf32-i386 -O binary -S example.elf example.com
这样编译出来的不是512字节 因为是引导程序 所以我们要用ultraedit 填充满512字节 最后两个改成0x55aa;
PS:
感谢 骨骨猫儿的指导和代码。。。
- NASM GCC混合编译16位二进制文件。。。。
- 64位linux c+nasm混合编程 gcc编译报错
- GCC跟NASM联合编译
- [编译环境][gcc]16位程序中汇编代码与C语言代码的混合编译
- 使用nasm和gcc生成无格式的二进制文件
- 使用nasm和gcc生成无格式的二进制文件
- 如何编译文件(gcc + nasm)
- [编译环境][gcc]编译16位程序
- GCC+NASM
- 使用GCC和NASM在Linux下联合编译
- Ubuntu下用gcc与nasm联合编译
- Ubuntu下用gcc与nasm联合编译
- GCC MakeFile Asrc 的设置-GCC ASM混合编译
- nasm与c混合编程
- gcc 和 nasm的区别
- openssl nasm 编译
- cmake 编译 nasm 文件
- GCC静态编译32位程序
- VS 2010 和 .NET 4.0 系列之《自动启动ASP.NET应用》篇
- Rational Rose 2003 逆向工程转换C++ / VC++ 6.0源代码成UML类图[转]
- 从追MM谈Java的23种设计模式
- 文件数据分析制作过程【3】
- Flex鼠标移到Label上显示手型useHandCursor
- NASM GCC混合编译16位二进制文件。。。。
- trait技术
- 【转】Rational Rose与PowerDesigner:两款建模工具对比分析比较
- 如何改善你的Flex系统性能(Performance)
- Jolt大奖作品、重磅星级图书尽在十月
- [教程] Android修改源代码控制永不锁屏
- 软件构想:supermemo 云计算方案
- InputStream和OutPutStream类定义的字节输入/输出流常用的方法
- 免费学习大学课程