ich folgende Assembler-Programm auf Debian sid bin kompilieren, aber es wird nicht laufen mir die Fehlermeldung geben:binär läuft nicht auf Debian sid
-bash: ./power: nicht Binärdatei aus
-Code
.section data
.section text
.global _start
_start:
# do first calc and save the answer
pushl $3
pushl $2
call power
addl $8, %esp
pushl %eax
# do second calc
pushl $2
pushl $5
call power
addl $8, %esp
# add both together
popl %ebx
addl %eax, %ebx
# exit with answer as return status
movl $1, %eax
int $0x80
.type power, @function
power:
# ?
pushl %ebp
movl %esp, %ebp
subl $4, %esp
# load params
movl 8(%ebp), %ebx
movl 12(%ebp), %ecx
movl %ebx, -4(%ebp)
power_loop_start:
# have we looped down to 1?
cmpl $1, %ecx
je end_power
# multiply prev result by base and store
movl -4(%ebp), %eax
imull %ebx, %eax
movl %eax, -4(%ebp)
# go again
decl %ecx
jmp power_loop_start
end_power:
movl -4(%ebp), %eax
movl %ebp, %esp
popl %ebp
ret
ich laufe mit:
as power.s -o power.o
ld power.o -o power
./power
Beide uname -m
und arch
gib mir i686, und die binären gibt diese auf objdump -x
:
$ objdump -x power
power: file format elf32-i386
power
architecture: i386, flags 0x00000012:
EXEC_P, HAS_SYMS
start address 0x00000000
Sections:
Idx Name Size VMA LMA File off Algn
0 text 0000004a 00000000 00000000 00000034 2**0
CONTENTS, READONLY
SYMBOL TABLE:
00000000 l d text 00000000 text
00000023 l F text 00000000 power
00000032 l text 00000000 power_loop_start
00000043 l text 00000000 end_power
00000000 g text 00000000 _start
08049034 g *ABS* 00000000 __bss_start
08049034 g *ABS* 00000000 _edata
08049034 g *ABS* 00000000 _end
nicht sicher, was ich falsch mache.
Weitere Anmerkung:
Dieses Beispiel stammt aus dem Buch „Programmieren von Grund auf“. Ich habe versucht, auf einem Red Hat x86_64 Maschine, mit as
Flags --32
und ld
Flags -m elf_i386
, alles kompiliert fein wie auf der x86-Maschine, aber bei der Ausführung gibt den gleichen Fehler.
Sie haben einen Tippfehler: '.section text' sollte' .section .text' sein (notieren Sie den Punkt) oder nur '.text'. – Jester
@Jester wow, ich wünschte, ich könnte dich 100 mal abstimmen. Ich habe versucht, das für einen Tag herauszufinden. Sowohl der Text als auch die Daten haben keine Punkte! Ich wünschte, der Compiler hätte sich beschwert ... – sprocket12