链接器的重定位符号引用

csapp p462 重定位符号引用
假设每个节s是一个字节数组,每个重定位条目r是一个类型为Elf_Rel的结构,假设链接器为每个节(用ADDR(s)表示)和每个符号都选择了运行时地址(用ADDR(r.symbol)表示)
foreach section s{

foreach relocation entry r{/* ptr to reference to be relocated */
/* Relocate a PC-relative reference */
if (r.type == R_386_PC32){
    refaddr = ADDR(s) + r.offset; /* ref's run-time address */
    *refptr = (unsigned)(ADDR(r.symbol) + *refptr - refaddr);
}

/* Relocate an absolute reference */
if (r.type == R_386_32)
    *refptr = (unsigned)(ADDR(r.symbol) + *refptr)
}

}
这个伪代码看不懂s和ADDR(s)的区别是什么?
前面几章都比较顺利,一看到链接瞬间卡壳了....

阅读 3.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进