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

7 просмотров

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

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

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

Комрады, посоветуйте, куда копать? Стал прикручивать кастомизацию тем. В OnShow главной главной формы пытаюсь загрузить из файла настроек и применить тему (на скрине, как долж...
Ed Doc
13
OnShow один раз вызывается? или возможен Hide?
Iluha Companets
14
Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
@sand_witch скорее к тебе вопрос, добавил в .cabal webdriver-w3c и вот такая ошибка от nix develop error: Package ‘script-monad-0.0.4’ in /nix/store/7vdxbra0kwbr0ys0kc5...
Fedor
5
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Карта сайта