LINUX.ORG.RU

GDB и NASM

 , ,


0

1

gdb отказывается выполнять по одной инструкции. Например есть код:

;  hello.asm  a first program for nasm for Linux, Intel, gcc
;
; assemble:	nasm -f elf -l hello.lst  hello.asm
; link:		gcc -o hello  hello.o
; run:	        hello 
; output is:	Hello World 

	SECTION .data		; data section
msg:	db "Hello World",10	; the string to print, 10=cr
len:	equ $-msg		; "$" means "here"
				; len is a value, not an address

	SECTION .text		; code section
        global main		; make label available to linker 
main:				; standard  gcc  entry point
	
	mov	edx,len		; arg3, length of string to print
	mov	ecx,msg		; arg2, pointer to string
	mov	ebx,1		; arg1, where to write, screen
	mov	eax,4		; write command to int 80 hex
	int	0x80		; interrupt 80 hex, call kernel
	
	mov	ebx,0		; exit code, 0=normal
	mov	eax,1		; exit command to kernel
	int	0x80		; interrupt 80 hex, call kernel

Собираю его так:
nasm -f elf hello.asm -g -l hello.lst
gcc hello.o -o hello -g 
В gdb, ставлю бряк на 18 строчку, нажимаю run и выполняется сразу весь код. При этом gdb выдаёт предупреждение:
warning: Could not load shared library symbols for linux-gate.so.1.
Do you need "set solib-search-path" or "set sysroot"?
У меня slackware 14 rc 2, на 12.2 всё замечательно работает.

★★★★

Последнее исправление: fero (всего исправлений: 1)

Да, та же фигня. В as из binutils при этом всё работает. Можно попробовать воспользоваться intel2gas утилитой (есть в репах убунты), и компилировать синтаксис AT&T.

luke ★★★★★
()
Ответ на: комментарий от luke

Но раньше всё работало. Может откатить попробовать nasm или gdb? Интересно что вообще поломаться могло со времён 12.2?

fero ★★★★
() автор топика
Ответ на: комментарий от fero

Я раньше не застал, если работало, значит стоит откатиться.

luke ★★★★★
()

Откат gdb до 6.8 не помог: Кстати вот что ещё говорит gdb:

Single stepping until exit from function main, 
which has no line number information.

fero ★★★★
() автор топика

На 12.2 никаких linux-gate.so не нашел, всё и без неё работает.

fero ★★★★
() автор топика
Последнее исправление: fero (всего исправлений: 1)

Обновил все возможные пакеты до стабильных версий. Nasm тоже обновился, не помогло.

fero ★★★★
() автор топика
Ответ на: комментарий от Harald

Хорошо, а почему так происходит? На 12.2 те же команды работают. Возможно проблема в nasm? Gdb я откатывал, cейчас попробую откатить nasm.

fero ★★★★
() автор топика

Попробуй break поставить на метку main. (У меня была та же проблема, но инструкция break main останавливает программу и позволяет использовать отладку).

Genuine ★★★
()
Ответ на: комментарий от Genuine

Всё, проблема решена даунгрейдом до 2.7. Спасибо всем, кто ответил. Стоит ли написать разработчикам nasm?

fero ★★★★
() автор топика
Ответ на: комментарий от Genuine

Я всё это перепробовал уже. Не помогло.

fero ★★★★
() автор топика

Отправил багрепорт. Думаю, что тему можно закрывать. Большое всем спасибо.

fero ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.