真的没有干净和便携的方式.我见过的大多数项目都有一些构建步骤,可以生成struct offsets的头文件.它有点像这样:
1)创建一个定义偏移量的C文件
#include "mystruct.h"
#define DECLARE(SYM,VAL) \
__asm("__AS_DEFINE__ " SYM "\t%0" : : "n" ((unsigned long)(VAL)))
void foo(void)
{
// mystruct.h
DECLARE("MYSTRUCT_B", offsetof(struct mystruct, b));
}
Run Code Online (Sandbox Code Playgroud)
2)使用标志编译该文件以生成程序集(Clang或GCC上的-S).这将创建一个包含一堆定义行的汇编文件,例如:
__AS_DEFINE__ MYSTRUCT_B #4
Run Code Online (Sandbox Code Playgroud)
3)使用一些shell技巧将它们变成汇编代码的头文件.
grep '__AS_DEFINE__' offsets.s | sed 's/#//g' | sed 's/__AS_DEFINE__/#define/g' > build/include/offsets.h
Run Code Online (Sandbox Code Playgroud)
这会生成一个看起来像这样的文件,并且可以包含在程序集源中.
#define MYSTRUCT_B 4
Run Code Online (Sandbox Code Playgroud)
然后,您可以直接使用它.
#include "offsets.h"
ldr r1, [r2, #MYSTRUCT_B]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1910 次 |
| 最近记录: |