Задать вопрос
hitakiri
@hitakiri

Как корректно подключить cinvoke в FASM под ELF64?

Элементарная заготовка новичка:
format ELF64 executable 3
entry start

	; include 'linInclude/import32.inc'
	; include 'linInclude/proc32.inc'
	; interpreter '/lib/ld-linux.so.2'

	include 'linInclude/import64.inc'
	include 'linInclude/proc64.inc'
	interpreter '/lib64/ld-linux-x86-64.so.2'

	needed  'libc.so.6'

	import  exit,\
	        printf

segment readable executable
		  cinvoke printf, fmtS, msg
         cinvoke	exit

segment readable writeable
		  msg db 'Hello, World!', 0xA, 0
          fmtS db '%s', 0xA, 0


В режиме 32 бита (инвертировать импорты и сменить ELF64 на ELF) всё работает.
При переключении на 64-бита компилируется, но при запуске выдаёт Segmentation fault (core dumped)
  • Вопрос задан
  • 288 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
include 'linInclude/proc64.inc'

В стандартной поставке fasm нет ведь такого файла? Где ты его взял?

У меня заработал вот такой код:
format ELF64 executable 3

  include '/usr/share/fasm/examples/elfexe/dynamic/import64.inc'
  interpreter '/lib64/ld-linux-x86-64.so.2'

  needed  'libc.so.6'

  import  exit, printf

segment readable executable
entry $

        lea rdi, [fmtS]
        lea rsi, [msg]
        call [printf]
        call [exit]

segment readable writeable
        msg db 'Hello, World!', 0xA, 0
        fmtS db '%s', 0xA, 0
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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