Gnu Assembler/C-Funktionen/Windows
-
Erstmal hallo.
Ich beschäftige mich im moment mit Assembler, dabei arbeite ich mich entlang des Buches "Professional Assembly Language" voran. Dieses ist eher Linuxorientiert. Unter Linux klappt auch alles wunderbar, nun wollte ich mal versuchen, ein simples Programm unter Windows zu assembilieren. Es klappt auch - ist schließlich cross-platform. Was nicht klappt, ist das linken und zwar: Im programm werden die standard-c-funktionen printf und exit aufgerufen, jetzt würde ich gerne wissen, was ich linken soll, um das Programm auch unter windows ausführen zu können.
Hier nochmal der code:.section .data output: .asciz "Your processor is a(n) %s\n" .section .bss .lcomm vid,12 .section .text .globl main main: mov $0x0,%eax cpuid movl $output, %edi movl %ebx, (%edi) movl %edx,4(%edi) movl %ecx,8(%edi) push $vid push $output call printf add $8,%esp pushl $0 call exit
das mach ich unter linux:
as -o cpuid.o cpuid.s ld --dynamic-linker /lib/ld-linux.so.2 -o cpuid cpuid.o -lc
Zwar werde ich später assembler nur inline verwenden, was unter windows auch einwandfrei klappt, dennoch möchte ich gerne ein GAS programm mit c funktionen auch unter windows zum laufen bringen. Bitte um Hilfe
-
Hallo,
man muss nicht unbedingt mit dem Linker direkt arbeiten, man kann es auch mit dem gcc machen. Bei mir hat es so funktioniert:
as cpuid.s -o cpuid.o mingw32-gcc cpuid.o -o cpuid.exe
Ich habe deinen Code ein wenig modifiziert, damit es linkbar ist und was sinnvolles macht:
.section .data output: .asciz "Your processor is a(n) %s\n" .section .bss .lcomm vid,12 .section .text .globl _main _main: mov $0x0,%eax cpuid movl $vid, %edi movl %ebx, (%edi) movl %edx,4(%edi) movl %ecx,8(%edi) push $vid push $output call _printf add $8,%esp pushl $0 call _exit
Alle Funktionsnamen mit einem Unterstrich versehen, und in der Zeile 11 statt Adresse vom output String die Adresse vom vid String eingesetzt (sonst wird ja der output String überschrieben).
Hier sind meine Werkzeuge:> as --version GNU assembler 2.17.50 20060824 > mingw32-gcc --version mingw32-gcc.exe (GCC) 3.4.5 (mingw special) Copyright (C) 2004 Free Software Foundation, Inc.
Hoffe, es hilft weiter.
-
wheeee, danke, klappt wunderbar.
hehe hab die exe auf 3,5 kb kleingeschrumpft. kriegt mans noch kleiner hin? gibts irgendwo gute tutorials zur größenminimalisierung?
-
Aus reiner Neugier, warum möchtest du die exe unbedingt klein kriegen? Doch nicht etwa aus Platzmangel auf der Festplatte?
-
für asm unter windoofs gibts nur eine vernünftige software: http://www.rosasm.org/
-
@abc.w: ne. bin nur von der demoscene etwas begeistert^^. will Crysis in 4 kb xDDDDD
@fricky: vllt hast du recht. ich versuch aber möglich crossplatform zu bleiben
-
Kann mir einer sagen wo man den gnu assembler für windows downloaden kann?
-
Was willst Du damit? Um ernsthaft Assembler zu programmieren ist der doch ungeeignet. Besser Du schaust Dich nach NASM um.
Ansonsten: Der sollte doch bei den GNU Compiler Tools integriert sein und die gibt es ja auch für Windows.
-
lupo1977 schrieb:
Besser Du schaust Dich nach NASM um.
oder noch Besser: jWasm