小编Haz*_*aza的帖子

从 arm-none-eabi 中排除标准库

我正在尝试在tasking-Framework上使用OTAWA执行 WCET 分析。但是,该工具无法解析间接跳转指令。我调查了这些间接跳转的来源,我发现包含的标准库是这些间接跳转的原因。主要是 。这些文件不包含在框架中,但由于编译器标志而被添加 。没有这个标志,我得到了未定义引用的链接器错误。fvrwrit.c, signal.c , wctromb.c, vfprint.cspecs= nonsys.specs

有没有办法不包含标准库,并且仍然有一个有效的 .elf 二进制文件和正确的控制流图?或者如何强制编译器不生成间接分支并将其替换为直接分支?

c++ arm static-analysis cross-compiling

7
推荐指数
0
解决办法
162
查看次数

链接后如何获取位码llvm?

我正在尝试为与某些静态库链接的文件获取 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 版实现这一点?

llvm clang llvm-ir

6
推荐指数
1
解决办法
203
查看次数

在另一个向量的某个位置插入一个向量

我想在 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它并用向量替换它。

c++ stdvector

3
推荐指数
1
解决办法
529
查看次数

如何在ARM ELF文件中找到函数内存映射?

我正在尝试使用 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 c++ arm static-analysis

3
推荐指数
1
解决办法
357
查看次数

如何将 C++ 循环转换为 C 风格的循环?

如何将像下面这样的循环转换为 C 风格?

for (auto element : vector) {
   Do_Somethin();
}
Run Code Online (Sandbox Code Playgroud)

c c++ loops code-translation

-4
推荐指数
1
解决办法
191
查看次数