汇编程序调用c程序

首先是汇编程序,还是前面的例子,只是加了2行程序:

extern main             ;说明这个函数从外面程序获得

[section .data]
                     charact  db  'a'
[section .text]
global _start
_start:
    MOV ECX,charact
    PUSH ECX   
    CALL usestack   
    POP ECX
    MOV EDX,1
   MOV EBX,1
   MOV EAX,4
    INT 0X80

   call main       ;在这里调用函数
   MOV EAX,1
   MOV EBX,0
   INT 0X80
 usestack:
   MOV EBP, ESP
    PUSHAD
    MOV EBP,DWORD[EBP+4]
    INC  WORD[EBP]  
    POPAD
   RET  

下面是c语言程序:

#include <stdio.h>

int main(void)

{

    printf("hello/n");

   return 0;

}

将汇编语言编译成.o文件:

nasm -f elf stack.asm  生成stack.o

将c语言编译成.o文件:

gcc -c hello.c  ,生成hello.o

然后用以下命令连接:

ld -dynamic-linker /lib/ld-linux.so.2 -lc  -o myapp stack.o hello.o

得到可执行程序myapp,用./myapp执行即可,输出为bhello。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值