4

I know os will load elf in physical memory. When execute jmp elf-address,system will check tlb and convert the elf-address to physical address. I am confused that elf-address does not have segment num and page num? How os convert elf-address to what MMU need.

I'm really confused that. I know linux will read header of elf and map elf. When page fault happened,kernel will load elf in memory and refresh page table. But you konw elf address is like 0x0804900. If we want to exe jmp elf-address ,how kernel map the elf-address to address which MMU can use. You know MMU address is based on segment num and page num.

Is there a map table which os will look for? And when exec jmp elf-address, will os first map elf-address to MMU address? eg: elf-address <==> MMU-address

4

1 に答える 1

1

Linux カーネルがexecve(2)バイナリ ELF 実行可能ファイルを物理 RAM にロードしているとは思えません。

ファイルのいくつかの ELF セグメントをプロセスのアドレス空間にマッピングしているだけです。catプロセス 1234 のアドレス空間は、コマンドなどを使用して疑似ファイルを読み取ることで把握できます/proc/1234/mapscat /proc/self/mapsそれを実行しているプロセスのメモリマップを表示するコマンドを試してくださいcat

したがって、基本的には、 mmap(2)execve(2)のように、ある種のメモリ マッピングが行われます。MMUを設定して、何かへの最初のアクセスがメモリアドレスに違反し、カーネルがファイルからいくつかのページをロードします (ページイン要求ページング)。仮想メモリメモリ管理について読んでください。

Advanced Linux Programmingのような本を読むべきです。

FGE がコメントしたように、 ASLRの問題があります。

于 2013-01-09T11:59:35.280 に答える