gpt4 book ai didi

c - 如何根据给定的内存内容重建 C 结构体?

转载 作者:行者123 更新时间:2023-11-30 17:32:15 25 4
gpt4 key购买 nike

给定一些内存内容(例如来自 gdb),我想重建 C 结构的内容。 struct 定义如下(参见 man semop ):

unsigned short sem_num;  /* semaphore number */
short sem_op; /* semaphore operation */
short sem_flg; /* operation flags */

内存内容(如使用调试器的结构地址所示)如下:

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_numsem_opsem_flag 的值是多少?假设第一个变量使用一个字节,而其他两个变量各使用两个字节是否安全?我可以只进行以下映射吗?

sem_num = 00
sem_op = 00 ff
sem_flg = ff 00

最佳答案

根据 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;
}

包含确保已经定义了semop结构,需要填充该结构并与内存转储进行比较。事实证明,semop结构体的内容一定是这样的:

unsigned short sem_num = 0;
short sem_op = -1;
short sem_flg = 16*256; /* Corresponding to the flag SEM_UNDO */

关于c - 如何根据给定的内存内容重建 C 结构体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24288623/

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