プロセスの proc/pid/mem スタックを読み取ろうとしています (トレースには ptrace を使用します)
1) /proc/pid/maps を読み取り、スタックの先頭と末尾を保存します
unsigned int start_stack, end_stack;
2) lseek と read を使用して、スタックアドレスのメモリを読み取ります
読み込もうとすると問題が発生します:
int mem_file = open (mem_file_name, O_RDONLY);
if(mem_file==-1)perror("open file mem_file failed");
printf("start_stack = %x, end_stack = %x \n",
start_stack, end_stack);
/*I think the problem is here, but i'm not sure*/
if(lseek(mem_file, start_stack,
SEEK_SET)==-1)perror("lseek failed");
int buf_size = (int)(end_stack-start_stack);
buf = calloc(buf_size, sizeof(char));
if(read(mem_file, buf, size_buf) == -1 )perror("read failed");
printf("buf=");
for(i=0; i<size_buf; i+=2)
printf("%02x",buf[i]);
出力は次のとおりです。
start stack = bffde000, end stack = bffff000
buf = 00000000000000000000000000000000000000000000
lseek のオフセットが間違っているのでしょうか? この例では、オフセットは (unsigned int)bffde00、スタックの開始です。
助言がありますか ?ありがとう