我正在构建一个编译为64位(cc -q64 ...
)的自定义调试器,它可以连接到32位和64位可执行文件并窥视内存段。我面临以下情况:
a.h
:
struct dll{
void *nxt;
void *prev;
};
struct obj{
struct dll link;
int unique_id; //Unique id to find this structure in the stack or data area
... //Some more members
};
a.c
:
#include<stdio.h>
#include"a.h"
struct obj ob1;
main(){
struct obj ob 2;
ob1.id = 0x189acf;
ob2.id = 0x98bdac;
while(1);
}
debug.c
:
#include"a.h"
main(){
//attaching toprocess a.c
//peeping into stack area to find 0x98bdac found at address1
//Peeping into data area to find 0x189acf found at address2
//Using address1 - sizeof(struct dll) trying to reach the begining of obj1
//Using address2 - sizeof(struct dll) trying to reach the begining of obj2
}
遇到的问题是:
当ac以32位模式编译时,struct dll
的大小为4 + 4 = 8字节,但在debuger(总是64位)中发现struct dll
8 + 8 = 16字节的大小在调试器中执行adress1 - sizeof(struct dll)
会使我偏离ob1&amp;的开头8个字节。类似于ob2。
我在a.h
中声明了很多这样的结构,它们有几个数据成员以及指针和子结构,这使得通过单独找出每个成员的大小并将其求和以找到总结构来计算结构大小是不可行的。大小
我正在寻找一个方法sizeof_32()和sizeof_64()的实现,它将根据32位和64位计算结构的大小。
...谢谢