使用通过寄存器传递的参数的地址, 作为支持调用其他函数
2014-07-17 23:55
555 查看
#include <stdint.h> 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 LR getArgVal: 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 LR main: 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
相关文章推荐
- 对象作为函数参数时调用拷贝构造函数、引用做函数参数时只是传递地址
- Kotlin语言学习之将函数作为参数传递,使用双冒号::引用其他方法
- 对象作为函数参数时调用拷贝构造函数、引用做函数参数时只是传递地址
- 关于将函数的地址作为参数传递给另一个函数调用
- [K/3Cloud] 调用其他界面时通过Session传递对象参数
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- 线程中通过信号和槽函数传递信息的时候,由于用到了自己定义的参数结构,所以使用qRegisterMetaType
- cocos2dx 函数作为参数进行传递和调用(std::function跟CC_CALLBACK_1的使用)
- jQuery之异步Ajax请求使用 通过传递参数来调用后台方法返回状态
- 64位下好神奇啊(增加了PatchGuard技术保护自己,SSDT是相对地址,参数通过寄存器与rdi来传递)
- 成员函数指针作为参数传递给其他函数和普通函数指针的传递
- [项目实战派]csharp通过dll调用opencv函数,图片作为参数
- [K/3Cloud] 调用其他界面时通过Session传递对象参数
- 在函数中申请内存,使用参数传递方式将此内存的首地址传给实参
- 函数调用时基本的参数传递方式有传值与传地址两种
- Java值传递和地址传递:关于String类型和集合类型作为函数参数时传值问题的测试
- python里函数怎么样使用元组或字典作为参数调用
- 关于将数组作为参数传递给函数的简单使用
- Oracle不支持在select语句中调用自定义函数时使用自定义类型作参数?
- 可以通过定义js函数,将jsp变量值作为参数传递给该函数