结构中指针的偏移量,以及如何在程序集中获取值

时间:2017-03-05 04:26:38

标签: c pointers assembly struct sparc

假设有一个结构

struct info{
  struct stat information;
  char * filename
}

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

size_t fOffset = offsetof(struct info, filename);

现在fOffset是什么?

在SPARC程序集中,我想获取文件名中的实际字符串。这是我到目前为止所写的内容。该参数是info struct

的指针
set   fOffset, %l0
ld    [%l0], %l1

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

ldub  [%l2], %o0

我想现在%o0会存储字符串,但很明显它没有。谁来帮帮我?

1 个答案:

答案 0 :(得分:0)

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

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

  • 因为filename是一个指针,你需要将它初始化为某个东西,可能是malloc。如果你不这样做,那么你可能会因为指针无效而在ldub指令上出错了
  • 我猜你在使用代码中的32位用户空间,但是如果你运行的是64位用户空间,那么所有这些“ld”指令都必须是“ldx”

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

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

只需一条指令:

ld [%i0+%l1], %l2