汇编: 在Linux系统中调用C函数

汇编调用C库函数

  • Code

        ;; 可执行文件名: helloworld.asm
        ;; 程序版本: 0.01
        ;; 创建日期: 2019/1/02
        ;; 最后修改日期: 2019/1/02
        ;; 作者: ieeqc
        ;; 描述:
        ;; - 汇编调用c函数实现helloworld程序
        ;; 
        ;; 编译指令
        ;; - nasm -f elf -g -F stabs puts_hello.asm -o puts_hello.o
        ;; - gcc -m32 puts_hello.o -o hello
    
        
        SECTION .data               ; 包含已初始化数据段
    EatMsg:  db "Hello World!", 0
        SECTION .bss                ; 包含未初始化数据段
        SECTION .text               ; 包含代码段
    
        extern puts                 ; 说明来自glibc的puts函数
        global main
    
    main:
        push ebp                    ; 为调试器建立堆栈帧
        mov ebp, esp
        push ebx                    ; 保存现场
        push esi
        push edi
        push EatMsg                 ; 压入函数参数输出信息地址到栈中
        call puts                   ; 调用puts()函数
    
        add esp, 4                  ; 清理堆栈, 通过ESP 调用4字节
    
        pop edi                     ; 恢复现场
        pop esi
        pop ebx
        mov esp, ebp                ; 在返回之前,销毁堆栈
        pop ebp
        ret                         ; 返回
    
    

编译汇编代码

  • bash:

    nasm -f elf -g -F stabs puts_hello.asm -o puts_hello.o
    
    gcc -m32 puts_hello.o -o hello
    

汇编: 在Linux系统中调用C函数

上一篇:关于HTML语义化的一些理解


下一篇:Linux内核文件详解