我需要获取以下过程段的起始和结束地址:代码、数据、堆栈、环境。我知道它们在内存中的位置,但不知道如何使用API调用或其他方式来获取它们。使用以下代码已经找到了一些段的起始地址:
#include <stdio.h>
int temp_data = 100;
static int temp_bss;
void print_addr ( void )
{
int local_var = 100;
int *code_segment_address = ( int* ) &print_addr;
int *data_segment_address = &temp_data;
int *bss_address = &temp_bss;
int *stack_segment_address = &local_var;
printf ( "\nAddress of various segments:" );
printf ( "\n\tCode Segment : %p" , code_segment_address );
printf ( "\n\tData Segment : %p" , data_segment_address );
printf ( "\n\tBSS : %p" , bss_address );
printf ( "\n\tStack Segment : %p\n" , stack_segment_address );
}
int main ( )
{
print_addr ();
return 0;
}
但我不知道如何找到每个段落的结尾。我唯一的想法是一个段落的结尾就是另一个段落的开头。 请说明如何使用C和Linux API实现。
print_addr()
函数不会是第一个堆栈帧,而且在temp_data
之前的数据段中会有其他变量。请考虑查看objdump
的输出以了解你的可执行文件的外观。 - fuz