gpt4 book ai didi

c - 结构体中指针的偏移量,以及如何获取汇编中的值

转载 作者:行者123 更新时间:2023-11-30 16:49:23 25 4
gpt4 key购买 nike

假设有一个结构

struct info{
struct stat information;
char * filename
}

然后我设置文件名指针的偏移量

size_t fOffset = offsetof(struct info, filename);

现在 fOffset 是多少?

在 SPARC 程序集中,我想获取文件名中的实际字符串。这是我到目前为止所写的。参数是info结构体的指针

set   fOffset, %l0
ld [%l0], %l1

add %i0, %l1, %l2
ld [%l2], %l2

ldub [%l2], %o0

我认为现在 %o0 会存储字符串,但显然它不会。谁来帮帮我?

最佳答案

您已经正确完成了 fOffset 声明,因此它将包含文件名在结构中的偏移量。我也认为你的程序集是正确的,尽管我不确定你所说的“%o2 将存储字符串”是什么意思。在代码末尾,%l2 是指向字符串的指针,%o2 将包含字符串的第一个字节。所以你的代码对我来说看起来是正确的。

关于可能出现问题的一些想法:

  • 由于 filename 是一个指针,因此您需要将其初始化为某些内容,可能使用 malloc。如果您不这样做,那么您可能会在 ldub 指令上遇到错误,因为指针将无效
  • 我猜测您的代码使用的是 32 位用户空间,但如果您运行的是 64 位用户空间,则所有这些“ld”指令都需要为“ldx”

另请注意,您可以简化序列:

add   %i0, %l1, %l2
ld [%l2], %l2

仅一条指令:

ld [%i0+%l1], %l2

关于c - 结构体中指针的偏移量,以及如何获取汇编中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42604517/

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