用汇编实现add函数

简介: 平台macOS工具nasmclang文件main.c#include int add(int a, int b);int main() { printf("the reuslt of 2 plus 3 is %d\n", add(2, 3)); return 0;}add.

平台

  • macOS

工具

  • nasm
  • clang

文件

  • main.c

#include <stdio.h>

int add(int a, int b);

int main() {
    printf("the reuslt of 2 plus 3 is %d\n", add(2, 3));
    return 0;
}
  • add.asm

; 声明给linker, 这样才能连接上该函数
global add
section .data

section .text
add:
    ; 这两句在所有函数中都是必须的, 功能就是将从父函数的栈切换到子函数的栈
    push rbp
    mov rbp, rsp
    
    ; 在macOS中函数参数的传递的顺序是--> 见下面
    mov rax, rdi ; 获取第一个参数
    add rax, rsi ; 获取第二个参数, 函数的返回值放在rax中
    leave ; 作用: 将栈清除并还原(清除子函数的栈, 恢复父函数的栈, **注意: 子函数的栈用来存放局部变量**), 相当于
    ; mov esp, ebp
    ; pop ebp
    ret
  • 函数参数传递的顺序

  mov rdi,strformat    ;第一个参数
  mov rsi,1       ;第二个参数
  mov rdx,2       ;第三个参数
  mov rcx,3       ;第四个参数
  mov r8,4        ;第五个参数
  mov r9,5        ;第六个参数
  mov dword [rsp],6    ;第七个参数    
  mov dword [rsp+8],7  ;第八个参数
  mov dword [rsp+16],8 ;第九个参数
  mov dword [rsp+24],9 ;第十个参数

编译

  • nams -f macho64 --prefix _ add.asm

链接

  • clang main.c add.o -o main
目录
相关文章
|
11月前
8086汇编中mov,add,sub语法
8086汇编中mov,add,sub语法
152 0
|
存储
ARM64汇编的函数有那些需要重点注意?
ARM64汇编的函数有那些重点
405 0
ARM64汇编的函数有那些需要重点注意?
|
Android开发
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
298 0
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
|
机器学习/深度学习 NoSQL
gdb反汇编详解C函数底层实现笔记(程序堆栈、内存分配)
以下是在读《深入理解计算机系统》前面的章节“程序的机器级表示”时,自己动手在linux上使用了gdb对一个简单的C程序进行反汇编,通过不懈的努力终于查清楚弄明白了绝大多数的语句。
1040 0
|
iOS开发
IDA反汇编/反编译静态分析iOS模拟器程序(三)函数表示与搜索函数
打开IDA一般都是去搜索函数,可以说函数是IDA工程的基本单位吧,数据结构什么的都是为函数服务而已。函数列表在界面左侧的Functions Window: 可以看到,UIKit有27789个函数呢。
1207 0
|
iOS开发 编译器
xcode反汇编调试iOS模拟器程序(六)函数出入口处的处理与局部变量
引用第二节的例子: 函数的入口处,通常都是把esp的值传给ebp保存,然后下面的操作以ebp为基准做偏移量引用。因为esp作为栈指针,push和pop都会自动修改其值,所以用ebp可以不受影响。
791 0
|
iOS开发 NoSQL C++
xcode反汇编调试iOS模拟器程序(五)调试objc_msgSend函数
反汇编调试objective-c,遇到最多的就是objc_msgSend这函数了,本节主要讲讲它的实现以及调试过程的一些技巧。 以UIWebView为例子,看看它在loadRequest时做了什么。
1241 0