2017-03-05 72 views
0

假设有一个结构在结构中的偏移指针,以及如何组装

struct info{ 
    struct stat information; 
    char * filename 
} 

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

size_t fOffset = offsetof(struct info, filename); 

什么现在是fOffset值?

而在SPARC程序集中,我想获取文件名中的实际字符串。这是我迄今写的。参数是信息结构的指针

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

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

ldub [%l2], %o0 

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

+1

偏移量将取决于'struct stat'的定义以及要使用的编译器的实现和/或配置。 – MikeCAT

+0

我不认为这个问题涉及到struct stat,它是关于struct info中的char指针成员 – faker

+1

'fOffset'的值可能是'sizeof(struct stat)' - 可能加上一些填充,但可能不是。您无法在装配中确定该尺寸;你必须知道正确的尺寸 - 或者使用C而不是装配。 –

回答

0

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

什么可能会错误的一些想法:

  • 因为文件名是一个指针,你需要把它初始化的东西,可能使用malloc。如果你不这样做,那么你可能会在ldub指令上出错,因为指针会无效
  • 我猜你正在使用32位用户空间,但如果你正在运行一个64位的userland,所有的 “LD” 的指令需要 “LDX”

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

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

到只有一个指令:

ld [%i0+%l1], %l2