使用通过寄存器传递的参数的地址, 作为支持调用其他函数

#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 

使用通过寄存器传递的参数的地址, 作为支持调用其他函数

时间: 2024-11-06 16:56:07

使用通过寄存器传递的参数的地址, 作为支持调用其他函数的相关文章

[转]Asp.Net MVC使用HtmlHelper渲染,并传递FormCollection参数的陷阱

http://www.cnblogs.com/errorif/archive/2012/02/13/2349902.html 在Asp.Net MVC 1.0编程中,我们经常遇见这样的场景,在新建一个对象时候,通过HtmlHelper的方式在View模型中渲染Html控件,当填写完相关内容后,通过Form把需要新建的内容Post回View对应Controller的Action(例如:Create),指定的Action可以通过接受FormCollection参数.值参数或者某个类的实例参数(比如:

参数强制转换还是将参数的地址强制转换成线程参数

第一种方式:将传递的值,强制转换值的地址,然后在线程函数中,首先强制转换参数的类型,然后取值 DWORD WINAPI ThreadProc(LPVOID lpParam){ int i=(*(int*)lpParam);   //get the parameter from CreateThread function CreateThread(NULL,            NULL,      ThreadProc,      (LPVOID)i,**********      0,   

c语言: 修改参数的地址,及注意事项

如果需要在函数中修改参数的地址,首先参数肯定要是指针类型,同时传递的参数不能直接使用数组变量,至少需要先转换一下. 比如: char str[] = "123"; 不能直接传 abc(&str); 至少要: char *p = str; abc(&p); 2014-07-14

JS URL传递中文参数时出现乱码的处理

原文:JS URL传递中文参数时出现乱码的处理 在浏览器中显示的地址是这样的: 但是按F12调试的时候的地址却变化掉了: 这个肯定是是因为浏览器对url路径默认编码了.这个问题是在我们去取值的时候,得到的就是后面那一大串稀奇古怪的东西.得不到我们想要的值.怎么办呢?这里写出来的只是自己的解决方法,也许不能通用,跟大家分享下,有更好的方法,告我一声.      //得到url中的值 function request(paras){ var url = location.href; var para

JS加载获取父窗体传递的参数

JS加载获取父窗体传递的参数 $(document).ready(function () { var query = location.search.substring(1); var values = query.split("&"); for (var i = 0; i < values.length; i++) { var pos = values[i].indexOf('='); if (pos == -1) continue; var paramname = v

SpringMVC接收不到前端传递的参数原因分析

前言 ?在学习SpringMvc的时候遇到了一个问题,后台一直接收不到前台传递过来的参数,耽误了好长时间终于找到了原因,写篇博客记录下这个坑,嘤嘤嘤 --__-- 代码清单 ?使用SpringMvc接受前台传递的参数非常简单,只要参数名和前台表单中的名称一致即可,我弄得是一个文件上传的例子,所以看下我的前台页面 <body> <!-- enctype="multipart/form-data"在文件上传时加入,编码类型,其值默认是application/x-www-f

记录一个小问题,如果前端传递的参数是加密过的,需要在后台解密

如果前端传递的参数是加密过的,需要在后台解密,有中文等特殊符号需要用到加密: 前端代码: $.ajax({ type: "POST", url: "/init/SaveToDatabase", dataType: "json", async: false, data: decodeURIComponent(JSON.stringify(array)), success: function (result) { var statusCode = r

JS函数传递字符串参数(符号转义)

原文链接:https://blog.csdn.net/Myname_China/article/details/82907965 JS函数传递字符串参数,如果没有转义处理,在接收的时候无法正确的接收字符串. 在双引号内 <a href="javascript:orderDetails(\''+orderId+'\')">查看详情</a> <a href="javascript:void(0)" onclick="orderDe

.net core 在服务器端获取api传递的参数

在 ActionFilterAttribute 的OnActionExecutionAsync 中使用如下代码从流中读取用户参数 //从文件流中读取传递测参数 using (var ms = new MemoryStream()) { context.HttpContext.Request.Body.Seek(0, 0);//将读取指针迻到开始位置 context.HttpContext.Request.Body.CopyTo(ms); var b = ms.ToArray(); var pos