Я пытаюсь получить простой пример работы из сборочной книги, которую читаю.Я пытаюсь заставить GDB работать с моей простой программой сборки, которую я собираю с помощью ассемблера NASM.Ниже приведен код и объектный файл в формате elf.
; Version : 1.0
; Created Date : 11/12/2011
; Last Update : 11/12/2011
; Author : Jeff Duntemann
; Description : A simple assembly app for Linux, using NASM 2.05,
; demonstrating the use of Linux INT 80H syscalls
; to display text.
; Build using these commands:
; nasm -f elf -g -F stabs eatsyscall.asm
; ld -o eatsyscall eatsyscall.o
;
SECTION .data ; Section containing initialized data
EatMsg: db "Eat at Joe's!",10
EatLen: equ $-EatMsg
SECTION .bss ; Section containing uninitialized data
SECTION .txt ; Section containing code
global _start ; Linker needs this to find the entry point!
_start:
nop ; This no_op keeps gdb happy (see text)
mov eax,4 ; Specify sys_write syscall
mov ebx,1 ; Specify File Descriptor 1: Standard Output
mov ecx,EatMsg ; Pass offset of the message
mov edx,EatLen ; Pass the length of the mesage
int 80H ; Make syscall to output the text to stdout
mov eax,1 ; Specify Exit syscall
mov ebx,0 ; Return a code of zero
int 80H ; Make syscall to terminate the program
и
mehoggan@mehoggan:~/Code/AsmWork/eatsyscall$ objdump -s ./eatsyscall.o
./eatsyscall.o: file format elf32-i386
Contents of section .data:
0000 45617420 6174204a 6f652773 210a Eat at Joe's!.
Contents of section .txt:
0000 90b80400 0000bb01 000000b9 00000000 ................
0010 ba0e0000 00cd80b8 01000000 bb000000 ................
0020 00cd80 ...
Contents of section .stab:
0000 00000000 64000100 00000000 ....d.......
Contents of section .stabstr:
0000 00
Я использую следующую команду для сборки:
nasm -f elf -g -F stabs eatsyscall.asm
и я использую следующую команду для связи:
ld -o eatsyscall eatsyscall.o
Когда я запускаю GDB на исполняемом файле, я получаю следующее:
mehoggan@mehoggan:~/Code/AsmWork/eatsyscall$ gdb eatsyscall
GNU gdb (Ubuntu/Linaro 7.3-0ubuntu2) 7.3-2011.08
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/mehoggan/Code/AsmWork/eatsyscall/eatsyscall...Can't find any code sections in symbol file
(gdb) quit
Что мне нужно сделать в дополнение к тому, чтоЯ делаю выше, чтобы заставить gdb читать символы отладки, указанные для NASM с флагом -g?
FYI
mehoggan@mehoggan:~/Code/AsmWork/eatsyscall$ cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu 11.10"
mehoggan@mehoggan:~/Code/AsmWork/eatsyscall$ uname -a
Linux mehoggan 3.0.0-12-generic-pae #20-Ubuntu SMP Fri Oct 7 16:37:17 UTC 2011 i686 i686 i386 GNU/Linux
mehoggan@mehoggan:~/Code/AsmWork/eatsyscall$
- Обновление -
Даже если я выберу 64-битный маршрут со следующими командами, у меня все равно не получится:
mehoggan @ mehoggan: ~ / Code / AsmWork / eatsyscall $ nasm -f elf64 -g -F stabs eatsyscall.asmmehoggan @ mehoggan: ~ / Code / AsmWork / eatsyscall $ ld -o eatsyscall eatsyscall.o -melf_x86_64 mehoggan @ mehoggan: ~ / Code / AsmWork / eatsyscall $ ./eatsyscall bash: ./eatsyscg: невозможно выполнить двоичный файл~ / Code / AsmWork / eatsyscall $ objdump -s eatsyscall.o
eatsyscall.o: формат файла elf64-x86-64
Содержание раздела .data: 0000 45617420 6174204a 6f652773 210a Ешьте у Джо!.
Содержание раздела .txt: 0000 9048b804 00000000 00000048 bb010000 .H ......... H ...0010 00000000 0048b900 00000000 00000048 ..... H ......... H 0020 ba0e0000 00000000 00cd8048 b8010000 ........... H .... 0030 00000000 0048bb00 00000000 000000cd ..... H .......... 0040 80.
Содержимое раздела .stab: 0000 00000000 64000100 00000000 .... d .......
Содержимое раздела .stabstr: 0000 00.
mehoggan @ mehoggan: ~ / Code / AsmWork / eatsyscall $