为了账号安全,请及时绑定邮箱和手机立即绑定

C指针原理(4)-AT&T汇编

标签:
C++


首先我们先用汇编编写一个helloworld,注意我们直接在汇编代码中调用C语言的printf函数将"hello,world\n" 输出在屏幕上。

.section .data

  output:

  .asciz "hello,world\n"  

.section .text

   .global  main

   main:

   push $output

   call printf

   addl $4,%esp

   push $0

   call exit

上述代码中,

push $output将参数入栈,以便printf调用,

然后调用printf,printf会在栈中取出它需要的参数

2)我们直接使用GCC编译后运行 

deepfuture@ubu-s:~$ gcc -o  test test.s

deepfuture@ubu-s:~$ ./test

hello,world

3)那么调用C库函数所需要的参数入栈的顺序是什么?

再看一个例子

.section .data

  myvalue:

     .byte 67,68,69,70,0

  mygs:

     .asciz "%s\n"

.section .text

.globl main

   main:

    movl $myvalue,%ecx

    push %ecx

    push $mygs    

    call printf

    push $0

    call exit

67,68,69,70是C、D、E、F的ASCII码,0是字符串终结符

 这段代码的功能是输出“CEDF”,相当于下面的C代码

#include <stdio.h>

int main( void )

{

     char myvalue[]={67,68,69,70,0};

     printf( "%s\n" ,myvalue);

     return 0;

}

其中,后面的0表示字符串的终结符。

第一个参数最后一个入栈,按调用的相反顺序入栈

©著作权归作者所有:来自51CTO博客作者myhaspl的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消