Step 6 (S-7002)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/537/step/6

Step 6 (S-7002) 1.png

[00:00 - 00:16] для того чтобы лучше разобраться в том как работает программа можно попытаться проанализировать то что получается после компиляции конечно анализировать бинарный код достаточно сложно поэтому будем анализировать ассемблерный код то есть код на промежуточном языке которые очень близко


[00:16 - 00:36] близок к тому что получается потрясно просто компиляции для этого давайте рассмотрим пример который мы использовали на то что лекции нас есть 3 файла 1 то свой есть и в нем определенно функция позволяющая число в квадрат 2 теперь и в нем


[00:36 - 00:51] вызывается и есть еще дополнительный файл скворечник договор в котором указано объявление функции скучаю


[00:51 - 01:09] для того чтобы понять как работает линковка давайте скомпилирован эти файлы объектный код дать воспользуемся ключиком минусе на выходе мы получим мы пол и для того чтоб понять что находятся эти файлы можно


[01:09 - 01:24] при помощи команды он ждал посмотреть на их диссоциированные версию давайте посмотрим что у нас хранятся в мы едем


[01:24 - 01:42] секцию соответствующие функции мое и в этой секции мы видим вызов некоторых а если мы посмотрим на точка


Step 6 (S-7002) 2.png

[01:42 - 02:01] то мы увидим здесь секту соответствующую функцию скважин с именем и меня на соответствие с преобразованием мы говорили и реализации этой функции принципе здесь можно заметить например


[02:01 - 02:19] оператор целочисленное умножение которые реализуют возведение в квадрат то есть вот это да вот это звездочка соответствуют это более подробно вы говорить не будем но некоторые понимание того как это соотносится


Step 6 (S-7002) 3.png

[02:19 - 02:36] мы получили теперь давайте посмотрим какая дополнительная информация хранится объектах для этого воспользуемся другим ключиком команды - икс это в точку видит на содержимое дополнительных таблице которая хранится


Step 6 (S-7002) 4.png

[02:36 - 02:53] соответственно если мы запустим objdump для файла скважин точка org то мы увидим таблицу символов этого файла и в этом таблицу символов есть


[02:53 - 03:10] указание на секцию соответствующая функция squad если мы сделаем то же самое для точка то увидим здесь точно такую же таблицу символов


Step 6 (S-7002) 5.png

[03:10 - 03:26] в которой есть указание на функцию мы и кроме этого также указание на некоторые функцию скроет ссылка на которую в неопределенной undefined


[03:26 - 03:43] кроме этого в таблице релокейшн рекордс находится ссылка что некоторые функции square i должна быть определена


[03:43 - 03:58] адрес который здесь указан указывает на место в коде в которые можно подставить ссылку на функцию square давайте посмотрим он соответствует еще раз посмотрим на


[03:58 - 04:16] исходный код который получает этот код соответствует адресу функции main куда нужно подставить ссылку на


Step 6 (S-7002) 6.png

[04:16 - 04:32] французская то есть вот этот адрес и это шестнадцатиричное запись числа 10 соответствуют вот этим поэтам которые здесь описаны нулями


[04:32 - 04:48] то есть это by 9 + 1 байт которые соответствуют функциям вот здесь вот место линковщик должен будет поставить адрес функции скоро теперь если мы скомпилирую


[04:48 - 05:07] а наши программы получат точно также можем посмотреть что получилось после компиляции давайте так же вы за команду ждал


Step 6 (S-7002) 7.png

[05:07 - 05:23] нам покажут много секций нас интересует только то секции которые соответствуют функциям вот эти 2 секции 1 секция


Step 6 (S-7002) 8.png

Step 6 (S-7002) 9.png

[05:23 - 05:38] это соответствует 2 секция соответствие франциско можно увидеть что в то место где у нас был вызов функции


[05:38 - 05:56] square подставлен некоторые адрес вот этот адрес соответствует адресу функции скрывая видно что 2 числа равны то есть компоновщик на так и линковки замени э


[05:56 - 06:04] адрес который там был представлен в доме на адрес кунцевской