【发布时间】:2019-12-22 20:40:42
【问题描述】:
我使用 retdec 反编译了一个 .so 文件(来自 Android 应用程序中的 ARM 库),在代码中我可以找到如下指令:
int32_t a = `some value`;
int32_t b = `another value`;
*(int32_t *)(a + 4) = b;
由于使用任何值运行它都会导致编译时出现警告,并且运行时出现分段错误,我不确定它的实际作用。
【问题讨论】:
-
这意味着“获取
a + 4的结果,将其视为指向int32_t的指针,取消引用该指针并将b的值分配给结果。根据您的编辑,它将存储在a中的整数值视为一个地址,将该地址加4,并将b的值分配给该结果地址处的对象,这……嗯?难怪它会爆炸。跨度> -
@Dorinel Panaite 这是一个糟糕的代码。指针的大小可以等于 8。
-
@DorinelPanaite:我最喜欢的反编译描述是“把汉堡包变回奶牛”。如果这是一个糟糕的 C 语言翻译,我不会感到惊讶。
-
@Lundin:阅读问题的第一句话。它不是 GitHub 或库中的代码。它是反编译器的输出。
-
@VladfromMoscow:阅读问题的第一句话。代码是从反编译器输出的。除其他外,这意味着它不是可移植的代码;它专门与一个平台相关联,并且代表了某些机器代码的功能。人类编写的代码是“好”还是“坏”无关紧要。这根本不是这段代码的用途。此代码用于显示机器代码的作用,并且它正在这样做。
标签: c arm reverse-engineering decompiling