gpt4 book ai didi

c++ - LLVM-IR 数组指针赋值

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:31 25 4
gpt4 key购买 nike

在 C++/C 中你可以这样做:

unsigned char A[12];
unsigned int *B;
int *C;
B = malloc(sizeof(unsigned int));
C = malloc(2*sizeof(int));
A[0] = *B;
A[4] = *C;
//Then go on to access A byte by byte.

我想知道这在 LLVM-IR 中是否可行,或者它会立即提示类型问题。正要深入研究这个问题,但我想看看是否有人尝试过这个特定的例子。我会将 GEP A 的第 0 个位置作为 i8*,然后将 B 和 C 作为 i32*。如果可能的话,我对如何继续感到有点困惑。

提前致谢。

更新:

好的,如果我改为为 *B 和 C[0]、C[1] 添加初始化,那么 LLVM-IR/C/C++ 的答案会改变吗?

最佳答案

LLVM 具有 bitcast 指令,通常用于将一种类型的指针转​​换为另一种类型的指针 - 例如,i32*i8*.

因此,例如,如果您想访问一个 4 字节数字的第 3 个字节,则执行以下操作是完全合法的:

%bytes = bitcast i32* %num to i8*
%third_byte = getelementptr i8* %bytes, i32 2

当你做那样的事情时,请记住字节顺序。

是的,您可以使用此技术获取指向数组中特定位置的指针,并从那里storeload 值,使您能够复制整个示例.

关于c++ - LLVM-IR 数组指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21102434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com