Re: Про адресное пространство.
Victor Wagner <vitus@wagner.pp.ru> writes:
> On 2013.01.10 at 13:22:42 +0400, Dmitrii Kashin wrote:
>
>>
>> Сегодня игрался с gdb и обнаружил интересную вещицу.
>>
>> Я запустил 2 экземпляра gdb с одним и тем же исполняемым файлом (назовем
>> его - test). Дизассемблировал функцию main(), и обнаружил, что адреса в
>> обоих экземплярах gdb - совпадают.
>>
>> Походу, я что-то не так понимаю. Я полагал, что когда я запускаю процесс
>> - ему выделяется свое адресное пространство. И таким образом, если я
>> запущу два экземпляра программы 'test', адрес функции main первого
>> экземпляра должен отличаться от адреса одноименной функции второго
>> экземпляра, т.к. они находятся в разных адресных пространствах.
>
> Именно потому, что каждой программе выделяется своё адресное
> пространство, адреса имеют полное право совпадать.
>
> Вот если бы два экземпляра программы были загружены в одно адресное
> пространство, то пришлось бы одним и тем же объектам разных экземпляров
> располагаться по разным адресам.
В том-то все и дело, что, как мне кажется, совпадают именно физические
адреса. Вот конкретный пример:
(gdb) disassemble main
Dump of assembler code for function main:
0x080483dc <+0>: push %ebp
0x080483dd <+1>: mov %esp,%ebp
0x080483df <+3>: sub $0x10,%esp
0x080483e2 <+6>: movl $0x0,-0x4(%ebp)
0x080483e9 <+13>: movl $0x3,-0x4(%ebp)
0x080483f0 <+20>: mov $0x0,%eax
0x080483f5 <+25>: leave
0x080483f6 <+26>: ret
End of assembler dump.
Я посчитал, что 0x08000000 - это 128 MiB.
Мне сдается, что это адрес физической памяти, а не виртуальной.
Но именно эти адреса совпадают. И если я запускаю второй gdb - я увижу
тот же 0x080483dc. Почему - не понятно. Может быть, это какой-то
префикс, и мна первые две цифры адреса мне смотреть не надо?
--
**************************************
* jabber: freehck@jabber.mipt.ru *
* Registered linux user #546240 *
**************************************
Reply to: