我是编译器的初学者,但我对学习程序的结构(二进制)以及如何在内存中读取和加载以执行它非常感兴趣.你们有什么电子书/书籍/教程建议我快速入门阅读?
解决方法:
编译器和可执行二进制文件是远程相关的. (实际的可执行文件是由链接器ld构建的,而不是编译器).
在Linux系统上,linux kernel使用copy-on-write和demand-paging技术延迟加载程序页面,用于ELF可执行文件.共享库可以是dynamically loaded,并且优选地包含position independent code.
您可能有兴趣阅读compiler construction,Levine的书籍linkers & loaders,Linux Assembly Howto,Program Library Howto,ldd(1),execve(2),intro(2),071313,mmap(2),dlopen(3),elf(5),proc(5),signal(7)手册页.
还要尝试了解cat / proc / self / maps向您显示的内容(执行该cat的进程的内存映射).你也可以玩objdump.