32-bitars assembly under 64-bitars ubuntu [LÖST]

Här diskuteras programmering och utveckling
Användarvisningsbild
Retardedpope
Inlägg: 467
Blev medlem: 14 feb 2006, 19:31
Ort: Skåne

32-bitars assembly under 64-bitars ubuntu [LÖST]

Inlägg av Retardedpope »

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.
Användarvisningsbild
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

Inlägg av Osprey »

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...
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...
Användarvisningsbild
Retardedpope
Inlägg: 467
Blev medlem: 14 feb 2006, 19:31
Ort: Skåne

Re: 32-bitars assembly under 64-bitars ubuntu

Inlägg av Retardedpope »

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.
Jag använder gcc, som i sin tur använder gas, om jag inte har helt fel för mig.
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...
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: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...
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.

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?
Användarvisningsbild
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

Inlägg av Osprey »

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...
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...
Lars
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

Inlägg av Lars »

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...
Användarvisningsbild
Retardedpope
Inlägg: 467
Blev medlem: 14 feb 2006, 19:31
Ort: Skåne

Re: 32-bitars assembly under 64-bitars ubuntu

Inlägg av Retardedpope »

Lars skrev: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...
Yes, den sväljer assembly-kod. Ska testa detta när jag får möjlighet. Ser ut som att det blir rapportskrivande idag.

En fråga. Behöver jag inte installera någon 32-bitars version av biblioteksrutinerna för att kunna använda printf och liknande?
Lars
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

Inlägg av Lars »

Jo, ia32-libs behövs också (innehåller bl.a. libc). Men jag tror det finns med som standard.
Användarvisningsbild
Retardedpope
Inlägg: 467
Blev medlem: 14 feb 2006, 19:31
Ort: Skåne

Re: 32-bitars assembly under 64-bitars ubuntu

Inlägg av Retardedpope »

Såg nu att gcc-multilib är beroende av 32-bitars biblioteken.

Har testat och allt verkar funka.

Tack för hjälpen! :D
Skriv svar

Återgå till "Programmering och webbdesign"