BinaryReader br = new BinaryReader(new FileStream("filename", FileMode.Open));
int length = Convert.ToInt32(br.BaseStream.Length);
byte[] data = br.ReadBytes(length);
br.Close();
int e_shoff = System.BitConverter.ToInt32(data, 0x20);
int e_shnum = System.BitConverter.ToInt16(data, 0x30);
int dynstr_addr = 0;
int dynstr_len = 0;
for (int n = 0; n < e_shnum; n++)
{
byte[] by = new byte[0x28];
Array.ConstrainedCopy(data, e_shoff + 0x28 * n, by, 0, by.Length);
if (by[0] == 0x01 && dynstr_addr == 0) //需要初始化table
{
dynstr_addr = System.BitConverter.ToInt32(by, 0x10);
dynstr_len = System.BitConverter.ToInt32(by, 0x14);
n = 0;
}
if (dynstr_addr == 0) continue;
string section_name = GetByteString(data, dynstr_addr + System.BitConverter.ToInt16(by, 0x0));
if (section_name.Contains("bss"))
{
int bssaddr=System.BitConverter.ToInt32(by, 0x10) //这个就是你要的bss段地址!
break;
}
}
c#写的解析elf文件的代码 我把你用不到的部分都精简掉了 你拿去参考 转成c++的就可以用了
elf文件格式很简单的 网上很多资料 不是什么难事