2010-02-02 45 views
1

我急于寻找一个或多或少的详细描述,说明如何将应用程序加载到内存中,然后在Linux中执行。基本上,我想知道从ELF文件中读取哪些信息,执行哪些系统调用,例如exec() ,直到此信息存储在进程描述符中。在Linux中启动应用程序

有没有人知道一个很好的描述。谷歌博士就没有那么有用到目前为止

感谢

回答

2

strace的会帮助你的系统调用,这里就是你对自己在后台运行strace:

 
[[email protected] httpd]# strace strace 
execve("/usr/bin/strace", ["strace"], [/* 27 vars */]) = 0 
brk(0)         = 0x9aa3000 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7873000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 
open("/etc/ld.so.cache", O_RDONLY)  = 3 
fstat64(3, {st_mode=S_IFREG|0644, st_size=90632, ...}) = 0 
mmap2(NULL, 90632, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb785c000 
close(3)        = 0 
open("/lib/libc.so.6", O_RDONLY)  = 3 
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20-\\\0004\0\0\0"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=2403884, ...}) = 0 
mmap2(0x5ac000, 1526120, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x5ac000 
mmap2(0x71b000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16e) = 0x71b000 
mmap2(0x71e000, 10600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x71e000 
close(3)        = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb785b000 
set_thread_area({entry_number:-1 -> 6, base_addr:0xb785b6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 
mprotect(0x71b000, 8192, PROT_READ)  = 0 
mprotect(0x5a8000, 4096, PROT_READ)  = 0 
munmap(0xb785c000, 90632)    = 0 
brk(0)         = 0x9aa3000 
brk(0x9ac4000)       = 0x9ac4000 
write(2, "usage: strace [-dffhiqrtttTvVxx]"..., 1655usage: strace [-dffhiqrtttTvVxx] [-a column] [-e expr] ... [-o file] 

0

你可以在开始内核源码树位于文件fs/binfmt_elf.c中,并从那里开始工作(可能是up)。 它包含SVR4 ELF加载程序。

如果这是另一个加载器,我想它应该在同一个区域。

0

不实用作为第一篇文章,但我发现下面的文章是伟大的,当我需要获得大画面:

http://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html

http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory

http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory

写过最后两篇文章的人Gustavo Duarte的博客也充满了关于操作系统的大量一般信息。我强烈建议阅读它。