使用 GCC 和 GDB 写纯 32 位以及 64 位汇编(AT&T 风格)

您所在的位置:网站首页 gcc怎么编译32位的程序 使用 GCC 和 GDB 写纯 32 位以及 64 位汇编(AT&T 风格)

使用 GCC 和 GDB 写纯 32 位以及 64 位汇编(AT&T 风格)

2024-07-01 07:48| 来源: 网络整理| 查看: 265

x32

1.编写一个汇编文件

若不需要包含其他文件(包括库函数的文件),可以使用 .s 或 .S,若需要包含其他文件,必须使用 .S 的命名格式

gcc 64 bit 可用代码(现已发现,此代码仅在 linux 下的 gcc 可用, tmd-gcc 64bit 请用下面 gcc 32 bit 可用代码):

.globl main main: nop #空指令 mov $0, %eax #装入寄存器指令 ret #返回 eax 的值

gcc 32 bit 可用代码:

.globl _main _main: nop #空指令 mov $0, %eax #装入寄存器指令 ret #返回 eax 的值

这个汇编代码和 Masm 的不同,入口函数必须是 main(使用 32 bit 的 gcc 编译时是 _main),并且必须使用 .globl main 宏指令(使用 32 bit 的 gcc 编译时必须使用 .globl _main 宏指令)让链接器能够识别 main 函数并编译

2.使用 gcc 编译汇编文件

gcc 64 bit

若要得到可调式的程序,必须使用-g 参数,生成可调试的程序。

必须使用 -m32 参数,指定编译为 32 位的程序

若要指定输出的文件名,使用 -o [文件名] 指定输出的可执行程序名。(默认可执行程序名是 a.exe(Windows 下) 或 a.out(Linux 或 MacOS 下))

(建议在 linux 下,Windows 下的 mingw-w64 在以32位的方式编译时总是有问题(应该是缺少某些库文件))

[ 现已找到解决方案,Windows 下使用 tdm-gcc 可以编译 32 位的,也可以编译 64 位的(唯一的缺点,GCC 更新缓慢...  mingw-w64 的 gcc 已经是 7.x 版本,tdm-gcc 的 gcc 还是 5.x 的版本) ]

(本来下面大部分截图是 Windows 下用 x64 的程序装作是 x32 的,但是我觉得不能这样误导人,所以删掉换成 linux 下真正的 x32 程序了)

gcc 32 bit

若要得到可调式的程序,必须使用-g 参数,生成可调试的程序。

(Windows 下 mingw 32bit 可以正常使用)

gcc -g [程序名]

3.使用 gdb 进行调试

gdb [程序名]  

(若是 tmd-gcc 64bit,使用 gdb32 [程序名] 进行调试)

使用 start 指令,开始程序的运行

使用 ni 指令,进行单步执行

使用 i r [寄存器名],显示相应寄存器的值

使用 quit 退出调试

更多调试指令,请在互联网上查找 gdb 的资料,本文就不赘述了

结束

x64

1.编写一个汇编文件

若不需要包含其他文件(包括库函数的文件),可以使用 .s 或 .S,若需要包含其他文件,必须使用 .S 的命名格式

.globl main main: mov $10000, %rax ret

64位的入口函数一样必须是 main,并且必须使用 .globl main 宏指令让链接器能够识别 main 函数并编译

2.使用 gcc 编译汇编文件

若要得到可调式的程序,必须使用-g 参数

3.使用 gdb 进行调试

gdb [程序名]

使用 start 指令,开始程序的运行

使用 ni 指令,进行单步执行

使用 i r [寄存器名],显示相应寄存器的值

使用 quit 退出调试

更多调试指令,请在互联网上查找 gdb 的资料,本文就不赘述了

结束

[HELP] 有人知道更多关于 gcc 和 gdb 写汇编的书籍和资料吗?(我找了很多,几乎都是 masm 下的资料...)有的话欢迎在评论中留言!

参考链接:

https://stackoverflow.com/questions/17882936/global-main-in-assembly

https://stackoverflow.com/questions/291655/how-can-i-use-gcc-to-compile-x86-assembly-code-on-an-x64-computer

解决了 Windows 下 64bit gcc 无法编译 32 位程序的问题(感谢[早打大打打核战争 ]的回答!):

https://bbs.csdn.net/topics/391866590



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3