Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: GNU assembler, разница архитектур  (Прочитано 1621 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Alboroto

  • Автор темы
  • Участник
  • *
  • Сообщений: 121
    • Просмотр профиля
GNU assembler, разница архитектур
« : 07 Марта 2013, 19:17:49 »
Добрый день!
Пытаюсь разобраться в ассемблере по учебнику, дошел-таки до динамических библиотек. В общем, есть код, который написан в учебнике, под 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. Если где-то я назвал что-то не тем словом - поправляйте=)
« Последнее редактирование: 07 Марта 2013, 19:26:37 от Alboroto »

Оффлайн topspin

  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
Re: GNU assembler, разница архитектур
« Ответ #1 : 07 Марта 2013, 20:15:16 »
в 64 битном варианте параметры передаются через регистры а не через стек в таком порядке

rdi
rsi
rdx
rcx
r8
r9
следующие параметры передаются через стэк такжэ как и в 32 битном варианте

 номера системных вызовов тожэ различаются
вызов производится коммандой syscall





Оффлайн Alboroto

  • Автор темы
  • Участник
  • *
  • Сообщений: 121
    • Просмотр профиля
Re: GNU assembler, разница архитектур
« Ответ #2 : 07 Марта 2013, 20:18:40 »
Ясно, спасибо большое.
Об этом где-то можно почитать конкретнее, или перечитывать спецификации?=)

Оффлайн topspin

  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
Re: GNU assembler, разница архитектур
« Ответ #3 : 07 Марта 2013, 20:26:45 »
погугли и найдешь всю инфу ;D

Оффлайн Alboroto

  • Автор темы
  • Участник
  • *
  • Сообщений: 121
    • Просмотр профиля
Re: GNU assembler, разница архитектур
« Ответ #4 : 07 Марта 2013, 20:35:21 »
Ух, работает!
Погуглю завтра=)
Спасибо!

 

Страница сгенерирована за 0.016 секунд. Запросов: 21.