Добрый день!
Пытаюсь разобраться в ассемблере по учебнику, дошел-таки до динамических библиотек. В общем, есть код, который написан в учебнике, под i386, есть установленный на x86_64 ubuntu 12.04.
.section .data
helloworld:
.ascii "Hello, world!\n\0"
.section .text
.globl _start
_start:
pushl $helloworld
call printf
pushl $0
call exit
Я думаю понятно, что он должен делать=)
В учебнике написано, что нужно запустить ld так:
ld -dynamic-linker /lib/ld-linux.so.2 -o hellolib hellolib.o -lc
Естественно, это не работает. (Обращение к поврежденной разделяемой библиотеке)
Пробую поменять все pushl на pushq и сделать ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hellolib hellolib.o -lc
Линковщик отрабатывает без ошибок, а вот при запуске файл выдает ошибку сегментирования.
Я пробовал сделать что-то еще, всего уже не упомню, но результат один - одни ошибки.
Что я упустил и не смог нагуглить?=)
Вообще разницу в архитектуре я видел так:
В x86_64 больше регистры, больше регистров, названия у них отличаются, отличаются названия некоторых команд, (q вместо l на конце?), библиотеки конечно другие используются, что вытекает. А в чем еще разница? В написании программ, я имею ввиду, а то вся книга для 386 написана, лучше сразу знать, чем вот так вот=)
Заранее спасибо!
p.s. Если где-то я назвал что-то не тем словом - поправляйте=)