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 ответов

26 просмотров

Проделал ваш эксперимент. У меня 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, но это уже разница компиляторе, системе, командах и тд.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта