
NASM汇编
文章平均质量分 82
Freestyle Coding
这个作者很懒,什么都没留下…
展开
-
<__x86.get_pc_thunk.ax>有什么作用?
一、<__x86.get_pc_thunk.ax>在把C语言反汇编时,经常会看到这样的代码<__x86.get_pc_thunk.ax>。比如下面一段C语言代码:// main.cint main(void){ return 0;}然后,生成32位的可执行文件(32位的可执行文件比较简单,容易分析):gcc main.c -o main -m32然后反汇编,我这里使用gdb反汇编(也可以使用objdump等其他工具):可以看到main函数的反汇编结果。其他原创 2021-06-11 21:59:50 · 3416 阅读 · 1 评论 -
C语言调用函数时参数是使用栈还是寄存器
文章目录一、结论二、验证1. 32位程序2. 64位程序2.1 参数小于等于6个2.2 参数大于6个一、结论网上的文章有的说C语言调用函数参数使用栈传递,有的说使用寄存器传递。那么到底参数是使用栈还是寄存器呢?先说结论:32位程序使用栈传递64位程序根据参数的个数而不同参数1~6个,使用寄存器传递参数大于6个,多出来的参数使用栈传递二、验证1. 32位程序源代码:// main.cvoid fun(int a, int b){ a += 1; b +=原创 2021-05-29 17:12:38 · 3377 阅读 · 0 评论 -
C语言和汇编语言相互调用
C语言和汇编语言相互调用不同的语言就像一座孤岛,似乎毫不相干,但是所有的代码最终都要编译成机器指令,他们本质上也是一样的,最终都是变成指令给CPU下达命令。1. C语言的链接过程我们知道一个C语言源文件变成可执行文件,需要经过一下几个步骤:预处理。(hello.c -> hello.i)把头文件包含起来。编译。(hello.i -> hello.s)编译成汇编代码。汇编。(hello.s -> hello.o)生成目标文件。链接。(hello.o ->原创 2021-03-29 11:11:17 · 11570 阅读 · 7 评论 -
gdb调试查看CALL指令的压栈情况
gdb调试查看CALL指令的压栈情况文章目录gdb调试查看CALL指令的压栈情况CALL指令时压栈使用gdb调试验证CALL指令压栈情况查看_start标号断点执行前的情况查看反汇编代码查看print标号断点执行前的情况查看栈段的内容结论CALL指令时压栈有这样一段代码,功能是输出字符串,代码如下:section .datastrHello db "Hello World!", 0AhSTRLEN equ $-strHellosection .textglobal _start_sta原创 2021-03-18 11:03:25 · 1498 阅读 · 0 评论 -
NASM汇编发起系统调用输出Hello World
NASM汇编发起系统调用输出Hello World文章目录NASM汇编发起系统调用输出Hello World1. 汇编程序输出Hello World的4种方式2. 汇编发起Linux系统调用2.1 发起系统调用的步骤2.2 系统调用号对应表2.3 发起系统调用输出Hello, World2.4 更多代码练习1. 汇编程序输出Hello World的4种方式向显存中直接写入数据调用DOS中断调用BIOS中断发起系统调用(System Call)对于第一种方式,直接操作显存,进程应该是不允许直原创 2021-03-18 10:53:25 · 1294 阅读 · 0 评论