32-bitars assembly under 64-bitars ubuntu [LÖST]
- Retardedpope
- Inlägg: 467
- Blev medlem: 14 feb 2006, 19:31
- Ort: Skåne
32-bitars assembly under 64-bitars ubuntu [LÖST]
Ska bli intressant att se om det hänger några assembly-hackers på forumet.
Jag har assembly kod för ia-32 som använder sig av en del C-rutiner som printf.
Min fråga är vad jag ska göra för att få detta att kompilera och köra under 64-bitars ubuntu.
Jag har assembly kod för ia-32 som använder sig av en del C-rutiner som printf.
Min fråga är vad jag ska göra för att få detta att kompilera och köra under 64-bitars ubuntu.
- Osprey
- Inlägg: 6310
- Blev medlem: 06 apr 2008, 00:09
- OS: Ubuntu
- Ort: Göteborg/Mölndal/Falkenberg
- Kontakt:
Re: 32-bitars assembly under 64-bitars ubuntu
Generellt sett är det ingen skillnad på 32-bitars och 64-bitars assembler, allt hänger på den assemblator du använder och den maskinkod som finns. Dessutom kan man säga som så att det för en arkitektur med längre ordlängd som t.ex 64-bitar jämfört med 32, normalt sett bara innebär tillkomst av ett fåtal instruktioner och kanske några makron. Men givetvis kan det vara mer om arkitekturen skiljer helt.
Nu har jag själv inte satt mig in i skillnaden mellan ia_32 och x86_64, men det bör inte vara omöjligt att översätta däremellan...
Ett annat problem när man översätter assembler är att den brukar vara ganska systemnära och utnyttjar en hel del systemanrop. Dessa kan i sin tur innebära större problem att översätta/ersätta än den rena assemblerkoden...
Nu har jag själv inte satt mig in i skillnaden mellan ia_32 och x86_64, men det bör inte vara omöjligt att översätta däremellan...
Ett annat problem när man översätter assembler är att den brukar vara ganska systemnära och utnyttjar en hel del systemanrop. Dessa kan i sin tur innebära större problem att översätta/ersätta än den rena assemblerkoden...
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
- Retardedpope
- Inlägg: 467
- Blev medlem: 14 feb 2006, 19:31
- Ort: Skåne
Re: 32-bitars assembly under 64-bitars ubuntu
Jag använder gcc, som i sin tur använder gas, om jag inte har helt fel för mig.Osprey skrev:Generellt sett är det ingen skillnad på 32-bitars och 64-bitars assembler, allt hänger på den assemblator du använder och den maskinkod som finns. Dessutom kan man säga som så att det för en arkitektur med längre ordlängd som t.ex 64-bitar jämfört med 32, normalt sett bara innebär tillkomst av ett fåtal instruktioner och kanske några makron. Men givetvis kan det vara mer om arkitekturen skiljer helt.
En stor skillnad är att 64-bitars använder 64-bitars adresser, så jag kan inte lagra mina adresser i 32-bitars register längre. Skulle jag översätta manuellt innebär detta att jag skulle bli tvungen att byta alla "e-register" till "r-register" t ex %eax till %rax. Dessutom skulle jag bli tvungen att byta alla mina ".long" till ".quad". Jag tror du kan förstå varför det inte är ett alternativ.Osprey skrev:Nu har jag själv inte satt mig in i skillnaden mellan ia_32 och x86_64, men det bör inte vara omöjligt att översätta däremellan...
Anrops konventionen är annorlunda på x86_64. I ia_32 pushade man alla parametrar till stacken, men i x86_64 lägger man parametrar i register. Jag har inte riktigt fattat i vilka, men jag har fattat att det skulle vara väldigt mycket jobb att skriva om koden.Osprey skrev:Ett annat problem när man översätter assembler är att den brukar vara ganska systemnära och utnyttjar en hel del systemanrop. Dessa kan i sin tur innebära större problem att översätta/ersätta än den rena assemblerkoden...
Jag vet att min cpu klarar 32-bitars instruktioner, så därför är det inte omöjligt att assemblera till 32-bitars maskinkod och exekvera denna. Vad jag vill veta är hur man gör för att åstadkomma detta i ubuntu. Det låter rimligt att jag behöver 32-bitars versioner av biblioteksrutinerna jag använder och att jag måste berätta för gcc att jag vill ha 32-bitars kod. Dessutom måste ubuntu vara med på att jag exekverar 32-bitars kod.
Så hur bär jag mig åt för att åstadkomma detta?
- Osprey
- Inlägg: 6310
- Blev medlem: 06 apr 2008, 00:09
- OS: Ubuntu
- Ort: Göteborg/Mölndal/Falkenberg
- Kontakt:
Re: 32-bitars assembly under 64-bitars ubuntu
Jo precis, adresser och sådant är kul, speciellt om man använder sig av relativa adresser och andra finesser och anropskonventioner är också lite kul att ändra på ibland, speciellt om man i ena fallet pushar argumenten direkt medan man i det andra kan bygga upp ett register med data från flera olika håll...
Nåja, jag har skrivit massor av assembler, men tyvärr inte för PC. Den enda assembler jag skrivit på PC har varit crossassembler för TMS320 (DSP). Förhoppningsvis finns det någon här som är mer hemma på PC-assembler...

Nåja, jag har skrivit massor av assembler, men tyvärr inte för PC. Den enda assembler jag skrivit på PC har varit crossassembler för TMS320 (DSP). Förhoppningsvis finns det någon här som är mer hemma på PC-assembler...
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
-
- Inlägg: 6191
- Blev medlem: 14 jan 2007, 19:31
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Stockholm
Re: 32-bitars assembly under 64-bitars ubuntu
Om man installerar
gcc-multilib och kompilerar sin C-kod med "gcc -m32" så genereras ett 32-bitarsprogram. Och gcc sväljer väl assembly-kod också har jag för mig...

- Retardedpope
- Inlägg: 467
- Blev medlem: 14 feb 2006, 19:31
- Ort: Skåne
Re: 32-bitars assembly under 64-bitars ubuntu
Yes, den sväljer assembly-kod. Ska testa detta när jag får möjlighet. Ser ut som att det blir rapportskrivande idag.Lars skrev:Om man installerargcc-multilib och kompilerar sin C-kod med "gcc -m32" så genereras ett 32-bitarsprogram. Och gcc sväljer väl assembly-kod också har jag för mig...
En fråga. Behöver jag inte installera någon 32-bitars version av biblioteksrutinerna för att kunna använda printf och liknande?
-
- Inlägg: 6191
- Blev medlem: 14 jan 2007, 19:31
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Stockholm
Re: 32-bitars assembly under 64-bitars ubuntu
Jo,
ia32-libs behövs också (innehåller bl.a. libc). Men jag tror det finns med som standard.

- Retardedpope
- Inlägg: 467
- Blev medlem: 14 feb 2006, 19:31
- Ort: Skåne
Re: 32-bitars assembly under 64-bitars ubuntu
Såg nu att
gcc-multilib är beroende av 32-bitars biblioteken.
Har testat och allt verkar funka.
Tack för hjälpen!

Har testat och allt verkar funka.
Tack för hjälpen!
