#include <stdint.h> #include <stdlib.h> struct test_t { void (*func)(void *); void *param; }; static uint8_t buffer[10]; static uint8_t i; void *p1, *p2; void inc(void *param) { uint8_t *num = param; if(param == NULL) { return; } (*num)++; } int main(void) { struct test_t *test = (struct test_t *)&buffer[1]; p1 = (void *)&test->func; p2 = (void *)&test->param; test->func = inc; test->param = (void *)&i; if( test->func != NULL && test->param != NULL ) { test->func(test->param); } while(1) { } }
使用特权
struct test_t { void (*func)(void); }; void inc(void) { uint32_t num; num++; }
内存地址
if( test->func != NULL && test->param != NULL ) { test->func(test->param); }
if( test->func != NULL && test->param != NULL ) { test->func((void *)&i); }
static uint8_t buffer2[10]; if( test->func != NULL && test->param != NULL ) { test->func((void *)&buffer2[1]); }
LDRD r1,r0,[r4,#0]
汇编
LDRD指令
hardfault寄存器
hardfault寄存器值
feelhyq 发表于 2017-4-12 11:03 我刚才分析了半天,也弄不清楚,只是感觉 struct test_t *test = (struct test_t *)&buffer[1] 这个赋值非 ...
struct test_t *test = (struct test_t *)&buffer[1]
MemManage状态寄存器
BusFault状态寄存器
UsageFault状态寄存器
MemManage状态寄存器值
寄存器介绍
寄存器值
yearnext 发表于 2017-4-12 10:57 于是需要对ldrd指令做一些了解,入下图所示: 可以等效为
yearnext 发表于 2017-4-12 12:42 有看到介绍是这样的
yearnext 发表于 2017-4-12 12:43 不知道是否能解释产生此现象的原因
发表回复 本版积分规则 回帖后跳转到最后一页
人才类勋章
等级类勋章
发帖类勋章
时间类勋章
3
87
1
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号