pwn学习day3——函数调用约定

news/2024/5/20 0:06:01 标签: pwn, 二进制, ctf

文章目录

  • x32 cdecl调用约定
  • x64 System V AMD64 ABI调用约定

规定函数调用时如何传递参数,如何返回值,如何进行栈管理

x32 cdecl调用约定

参数从右往左依次压入栈中,返回值存入eax寄存器中,由调用者清理栈上的参数。

测试程序:

#include<stdio.h>

int main() {
	printf("%d, %d, %d, %d, %d, %d\n", 1, 2, 3, 4, 5, 6);
	return 0;
}

// 编译
// gcc test.c -o test_32 -m32
// -o test_32:指定输出文件名为 test_32。
// -m32 指示编译器生成 32 位架构的目标代码。

查看程序.text节区反汇编代码

objdump -d -j .text ./test_32 -M intel

objdump是一个用于显示二进制文件(例如 ELF 格式的文件)信息的命令行工具。在这个例子中,使用了以下选项和参数:-d:反汇编目标程序的代码部分。-j .text:只处理名为 .text 的节区(segment),这通常包含程序的可执行机器代码。./test_32:指定要分析的二进制文件名(这里是一个名为 test_32 的文件)。-M intel:设置输出格式为 Intel 风格。默认情况下,objdump 使用 AT&T 风格的汇编语言表示。因此,此命令将会把名为 test_32 的二进制文件中 .text 节区的内容反汇编成 Intel 风格的汇编语言代码。

查看main部分函数,可以发现传参是从右往左依次压入栈中。

img

x64 System V AMD64 ABI调用约定

参数前六个参数由寄存器传递,寄存器顺序为rdi、rsi、rdx、rcx、r8、r9,超过的参数由栈传递,返回值传入rax寄存器,栈由调用方管理。

#include<stdio.h>

int main() {
	printf("%d, %d, %d, %d, %d, %d\n", 1, 2, 3, 4, 5, 6);
	return 0;
}

# gcc test.c -o test_64

查看汇编代码

objdump -d -j .text ./test_64 -M intel

img如下图所示,前6个参数通过寄存器传参,后面的参数压入栈中

img


http://www.niftyadmin.cn/n/1007333.html

相关文章

python学习——函数

一、函数的定义 函数就是执行特定任务和完成特定功能的一段代码。使用函数可以对代码进行复用&#xff0c;提高代码的可维护性和可读性&#xff0c;使得程序便于调试。 二、函数的创建 创建格式 #创建和格式 def 函数名&#xff08;[参数]&#xff09;:函数体[return xxx]举例…

Android网络安全配置network_security_config

Android开发过程中&#xff0c;如果出现网络请求错误&#xff0c;测试经常会抓包来查看请求的情况。 在Android6.0 及以下系统可以抓包&#xff0c;而 Android7.0 及以上系统不能再抓包了&#xff0c;因为Android7.0及以上系统版本新增了证书验证&#xff0c;所以 app 内不再像…

Java——《面试题——Redis篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

CrossOver软件Mac2023下载安装教程

CrossOver是一款可以让Mac和Linux系统中正常运行Windows软件的应用程序。它不像虚拟机一样需要安装Windows系统之后才可以安装Windows的应用程序&#xff0c;这一方式给大多数用户带来了方便。通过CrossOver实现跨平台的文件复制粘贴&#xff0c;使Mac/Linux系统与Windows应用良…

Linux系统编程:进程的创建、终止和替换

目录 一. 进程创建 1.1 fork函数的使用 1.2 fork函数的底层实现 1.3 子进程创建的写时拷贝问题 二. 进程的退出 2.1 进程退出的场景和方法 2.2 exit和_exit函数 三. 进程的等待 3.1 为什么要有进程等待 3.2 进程等待的方法 3.2.1 进程等待的相关函数 3.2.2 进程的阻…

【Echarts】配置项 之 series

【Echarts】配置项 之 series 一、line二、bar三、pie四、scatter五、effectScatter六、radar七、tree八、treemap九、sunburst十、boxplot十一、candlestick十二、heatmap十三、map十四、parallel十五、lines十六、graph十七、sankey十八、funnel十九、gauge二十、pictorialBa…

Rust语言从入门到入坑——(11)面向对象

文章目录 0、引入1、封装2、继承3、多态4、引用 0、引入 Rust 不是面向对象的编程语言&#xff0c;但是可以实现面向对象方法&#xff1a;封装与继承&#xff0c;以及不完全的多态 1、封装 "类"往往是面向对象的编程语言中常用到的概念。"类"封装的是数据…

经理人必读的5本管理书籍推荐

在如今竞争激烈的商业世界中&#xff0c;管理者需要持续不断的学习、实践和反思。本文将向大家推荐5本打好管理学基础必看的管理书籍&#xff0c;这些书能帮助经理人提高自己的管理水平和能力、拓展自己的管理视野&#xff0c;以应对不断变化的商业环境和挑战 1、《经理人参阅…