我正在尝试在tasking-Framework上使用OTAWA执行 WCET 分析。但是,该工具无法解析间接跳转指令。我调查了这些间接跳转的来源,我发现包含的标准库是这些间接跳转的原因。主要是 。这些文件不包含在框架中,但由于编译器标志而被添加
。没有这个标志,我得到了未定义引用的链接器错误。fvrwrit.c, signal.c , wctromb.c, vfprint.c
specs= nonsys.specs
有没有办法不包含标准库,并且仍然有一个有效的 .elf 二进制文件和正确的控制流图?或者如何强制编译器不生成间接分支并将其替换为直接分支?
我正在尝试为与某些静态库链接的文件获取 LLVM IR。
我尝试使用llvm-link
. 它只是将 .bc 文件复制到一个文件中(不像本地链接)。
clang -L$(T_LIB_PATH) -lpthread -emit-llvm
给出一个错误:emit-llvm can not be used with linking
。传递-c
选项时,它会警告未使用链接选项。
我的主要目标是获取包含所有已解析符号和引用的 .bc 文件。我如何使用 clang 3.4 版实现这一点?
我想在 vectorb
的某个位置插入vector a
。例如
std::vector <int> vecta{ 10, 20, 30 ,40 , 50};
std::vector <int> vectb{ 1000, 2000, 3000 };
Run Code Online (Sandbox Code Playgroud)
我怎么能让结果向量像 {10,20,1000,2000,3000,40,50} ?我想删除30
它并用向量替换它。
我正在尝试使用 Z3 为大型框架对 ARMV7m 代码执行循环边界分析。我想在 .elf 文件中找到某个函数使用的内存地址,例如在函数 foo() 我有下面的基本块
ldr r1, [r3, #0x20]
strb r2, [r3, #6] {__elf_header}
str r2, [r3, #0x24] {__elf_header}
str r2, [r3, #0x20] {__elf_header}
mov r3, r1
cmp r1, #0
bne #0x89f6
Run Code Online (Sandbox Code Playgroud)
如何获得此函数使用的初始内存位置[r3, #0x20]
?每个函数都有内存段可以访问还是随机的?鉴于上述基本块是一个循环。有没有办法知道在执行期间将使用的内存地址?
例如,编译器是否会保存从 0x20 到 0x1234 的内存位置地址,以便仅在执行此类基本块期间访问?换句话说,函数和它使用的内存地址范围之间是否存在映射?
如何将像下面这样的循环转换为 C 风格?
for (auto element : vector) {
Do_Somethin();
}
Run Code Online (Sandbox Code Playgroud)