170 похожих чатов

Небольшой вопрос про линкеж: для простенького следующего кода: int g() {


int x = 1;
return f();
}
int main() {
int x = g();
}

если скомпилировать (без линкежа) и посмотреть на таблицу символов:

$ gcc -c le1-1.c
$ nm le1-1.o

то получим:
U _f
0000000000000000 T _g
0000000000000020 T _main

а когда смотри на дамп объекта:


$ objdump -d le1-1.o
le1-1.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <g>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 48 83 ec 10 sub $0x10,%rsp
8: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%rbp)
f: b8 00 00 00 00 mov $0x0,%eax
14: e8 00 00 00 00 callq 19 <g+0x19>
19: c9 leaveq
1a: c3 retq
000000000000001b <main>:
1b: 55 push %rbp
1c: 48 89 e5 mov %rsp,%rbp
1f: 48 83 ec 10 sub $0x10,%rsp
23: b8 00 00 00 00 mov $0x0,%eax
28: e8 00 00 00 00 callq 2d <main+0x12>
2d: 89 45 fc mov %eax,-0x4(%rbp)
30: b8 00 00 00 00 mov $0x0,%eax
35: c9 leaveq
36: c3 retq

почему собственно в таблице адресс стоит 20 функции мейн в дампе 1b (вроде оба адреса относительно начала файла) ?
подзабыл.

3 ответов

24 просмотра

Проделал ваш эксперимент. У меня nm выдал адрес 1b у main $ nm le1-1.o U f 0000000000000000 T g U _GLOBAL_OFFSET_TABLE_ 000000000000001b T main

Это не должно компилироваться

Ilya- Автор вопроса
Alexander Pshenichnikov
Проделал ваш эксперимент. У меня nm выдал адрес 1b...

благодарю. видимо ошибка, это текстом из лекции. Проверил, адрес тот же, хотя у меня 1f, но это уже разница компиляторе, системе, командах и тд.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта