博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用通过寄存器传递的参数的地址, 作为支持调用其他函数
阅读量:5905 次
发布时间:2019-06-19

本文共 1682 字,大约阅读时间需要 5 分钟。

#include 
uint32_t arg = 0x12345678;uint32_t getArgVal0( uint32_t * arg){ return *arg;}uint32_t getArgVal( uint32_t arg){ return getArgVal0( &arg );}uint32_t * getArgPtr( uint32_t arg){ return &arg;}int main( void ){ arg = (uint32_t)getArgVal( arg); // OK arg = (uint32_t)getArgPtr( arg); // ERROR}

 

getArgVal0:   0x200050d0: 0x6800         LDR       R0, [R0]   0x200050d2: 0x4770         BX        LRgetArgVal:   0x200050d4: 0xb501         PUSH      {R0, LR}   0x200050d6: 0xa800         ADD       R0, SP, #0x0       ; Push Arg to Stack, use Address of Stack as argument pass to getArgVal0()      0x200050d8: 0xf7ff 0xfffa  BL        getArgVal0              ; 0x200050d0   0x200050dc: 0xbd02         POP       {R1, PC}getArgPtr:   0x200050de: 0xb401         PUSH      {R0}   0x200050e0: 0xa800         ADD       R0, SP, #0x0       ; Push Arg to Stack, Return Address of Stack    0x200050e2: 0xb001         ADD       SP, SP, #0x4   0x200050e4: 0x4770         BX        LRmain:   0x200050e8: 0x481b         LDR.N     R0, ??DataTable1_1      ; arg   0x200050ea: 0x6800         LDR       R0, [R0]   0x200050ec: 0xf7ff 0xfff2  BL        getArgVal               ; 0x200050d4   0x200050f0: 0x4919         LDR.N     R1, ??DataTable1_1      ; arg   0x200050f2: 0x6008         STR       R0, [R1]   0x200050f4: 0x4818         LDR.N     R0, ??DataTable1_1      ; arg   0x200050f6: 0x6800         LDR       R0, [R0]   0x200050f8: 0xf7ff 0xfff1  BL        getArgPtr               ; 0x200050de   0x200050fc: 0x4916         LDR.N     R1, ??DataTable1_1      ; arg   0x200050fe: 0x6008         STR       R0, [R1]                ; R0 is Address in Stack, NOT global

转载地址:http://wrdpx.baihongyu.com/

你可能感兴趣的文章
机器学习瓶颈 - 从黑盒白盒之争说起
查看>>
小程序图片上传七牛
查看>>
java交换两个变量值a,b的多钟方法
查看>>
Python中被双下划线包围的魔法方法
查看>>
JAVA核心编程教学
查看>>
Oracle:数据类型对应表
查看>>
洛谷P1349 广义斐波那契数列
查看>>
BZOJ3160 万径人踪灭
查看>>
Okhttp3请求网络开启Gzip压缩
查看>>
pycharm配置mysql数据库连接访问
查看>>
Spring源码学习:第0步--环境准备
查看>>
烂泥:rsync与inotify集成实现数据实时同步更新
查看>>
SQL连接问题,用户登录失败
查看>>
call & apply
查看>>
学习英语哦
查看>>
第六届蓝桥杯java b组第四题
查看>>
通过TortoiseGIT怎么把本地项目上传到GitHub
查看>>
Python 1 Day
查看>>
Python基础学习笔记(十:二进制位运算)
查看>>
HDU 5311 Hidden String
查看>>