给定一些内存内容(例如来自gdb)我想重构一个C结构的内容。 struct
定义如下(请参阅man semop):
unsigned short sem_num; /* semaphore number */
short sem_op; /* semaphore operation */
short sem_flg; /* operation flags */
和内存内容(由使用调试器的struct的地址指示)如下:
00000000 00 00 ff ff 00 10 78 bd 21 0a 8c c8 24 0a c4 95 |......x.!...$...|
00000010 5e 09 d0 69 22 08 18 78 c9 bf ed f4 28 08 00 00 |^..i"..x....(...|
00000020 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 |................|
sem_num
,sem_op
和sem_flag
的价值是多少?假设第一个变量使用一个字节是否安全,而另外两个每个使用两个字节?那我可以做下面的映射吗?
sem_num = 00
sem_op = 00 ff
sem_flg = ff 00
答案 0 :(得分:0)
根据Dark Falcon的建议,以下代码似乎可以完成这项工作:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int
main (void)
{
struct sembuf my_sembuf[1]= {
{0,-1,16*256}
};
unsigned char data[sizeof my_sembuf];
size_t i;
memcpy(data, &my_sembuf, sizeof my_sembuf);
for (i=0; i < sizeof my_sembuf; ++i)
printf("%02x\n", data[i]);
return 0;
}
include确保已定义semop
结构,需要填充该结构并与内存转储进行比较。事实证明,semop结构的内容必须如下:
unsigned short sem_num = 0;
short sem_op = -1;
short sem_flg = 16*256; /* Corresponding to the flag SEM_UNDO */