/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Assembly i C++
Fra : Socketd


Dato : 12-12-02 13:25

Hey group

Jeg har vist spurgte om dette før, men enten kom vi ikke til en løsning
eller også svigter min hukommelse mig

Jeg skriver lidt C++ og prøver nu at inkludere lidt assembly. Jeg fandt,
via google, ud af at der er minimum 3 måder:
asm
_asm og
__asm

Syntaksmæssigt hælder jeg nok til __asm, så jeg har skrevet følgende:

#include <iostream>

unsigned long get_reg();

using namespace std;

unsigned long get_reg() {
   __asm {
      "mov   ax, ds"
   }
}

int main() {
      cout<<"DS = "<<get_reg()<<endl;
}

Men når jeg forsøger at kompile på min FreeBSD puter siger den:
mem-cpp:8:syntax error before '{'

Så hvad gør jeg galt?

mvh
socketd

 
 
Martin Moller Peders~ (12-12-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 12-12-02 16:29

In <pan.2002.12.12.12.24.43.801984.634@traceroute.dk> Socketd <db@traceroute.dk> writes:

>Hey group

>Jeg har vist spurgte om dette før, men enten kom vi ikke til en løsning
>eller også svigter min hukommelse mig

>Jeg skriver lidt C++ og prøver nu at inkludere lidt assembly. Jeg fandt,
>via google, ud af at der er minimum 3 måder:
>asm
>_asm og
>__asm

>Syntaksmæssigt hælder jeg nok til __asm, så jeg har skrevet følgende:

Du kan ikke selv vaelge. Du skal da bruge det som din compiler forstaar.
I C/C++ standarderne er der intet om assembler-kode, saa alt
er udvidelser til diverse compilere.

Hvilken compiler bruger du ?

Hvis det er gcc, saa proev:
info gcc "C Extensions" "Extended Asm"

/Martin

Socketd (12-12-2002)
Kommentar
Fra : Socketd


Dato : 12-12-02 17:14

On Thu, 12 Dec 2002 16:28:32 +0100, Martin Moller Pedersen wrote:
> Du kan ikke selv vaelge. Du skal da bruge det som din compiler forstaar.
> I C/C++ standarderne er der intet om assembler-kode, saa alt er
> udvidelser til diverse compilere.
>
> Hvilken compiler bruger du ?
>
> Hvis det er gcc, saa proev:
> info gcc "C Extensions" "Extended Asm"

Jepsen, så virker det, takker

mvh
socketd

Ukendt (12-12-2002)
Kommentar
Fra : Ukendt


Dato : 12-12-02 20:40

On Thu, 12 Dec 2002 13:24:44 +0100, Socketd <db@traceroute.dk> wrote:

>Hey group
>
>Jeg har vist spurgte om dette før, men enten kom vi ikke til en løsning
>eller også svigter min hukommelse mig
>
>Jeg skriver lidt C++ og prøver nu at inkludere lidt assembly. Jeg fandt,
>via google, ud af at der er minimum 3 måder:
>asm
>_asm og
>__asm
>
>Syntaksmæssigt hælder jeg nok til __asm, så jeg har skrevet følgende:
>
>#include <iostream>
>
>unsigned long get_reg();
>
>using namespace std;
>
>unsigned long get_reg() {
>   __asm {
>      "mov   ax, ds"
>   }
>}
>
>int main() {
>      cout<<"DS = "<<get_reg()<<endl;
>}
>
>Men når jeg forsøger at kompile på min FreeBSD puter siger den:
>mem-cpp:8:syntax error before '{'
>
>Så hvad gør jeg galt?
>
>mvh
>socketd

Hej

Det eneste der er i vejen er, at du skal fjerne dine anførselstegn i
linien : "mov   ax, ds" !

MVH
Jesper G

Socketd (12-12-2002)
Kommentar
Fra : Socketd


Dato : 12-12-02 23:29

On Thu, 12 Dec 2002 20:39:43 +0100, Jesper G wrote:
> Det eneste der er i vejen er, at du skal fjerne dine anførselstegn i
> linien : "mov   ax, ds" !

Det har jeg også prøvet, men det gør ingen forskel.

mvh
socketd

Morten F. Hansen (13-12-2002)
Kommentar
Fra : Morten F. Hansen


Dato : 13-12-02 01:00

> unsigned long get_reg() {
> __asm {
> "mov ax, ds"
> }
> }

Mon ikke "unsigned short" ville passe lidt bedre til ax?



Socketd (13-12-2002)
Kommentar
Fra : Socketd


Dato : 13-12-02 01:11

On Fri, 13 Dec 2002 01:00:01 +0100, Morten F. Hansen wrote:

>> unsigned long get_reg() {
>> __asm {
>> "mov ax, ds"
>> }
>> }
>> }
> Mon ikke "unsigned short" ville passe lidt bedre til ax?

Egentlig skulle det nok være EAX, men jeg tog også bare eksemplet fra en
tutorial jeg er ved at læse.

mvh
socketd

Igor V. Rafienko (13-12-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 13-12-02 13:54

[ db@traceroute.dk ]

[ ... ]

> Jeg har vist spurgte om dette før, men enten kom vi ikke til en
> løsning eller også svigter min hukommelse mig
>
> Jeg skriver lidt C++ og prøver nu at inkludere lidt assembly.


Ikke gjør det. Inline assembly skaper bare problemer. Dersom du må ha
adgang til registrene/andre fasiliteter som er tilgjengelige kun fra
assembly, skill alt dette ut i en (ekstern) funksjon, som du så kan
kalle som om det var en vanlig funksjon.


> Jeg fandt, via google, ud af at der er minimum 3 måder:
> asm
> _asm og
> __asm


Kun en er standard -- "asm". Og det med implementasjonsspesifikk
betydning.

[ ... ]


> unsigned long get_reg() {
>    __asm {
>       "mov   ax, ds"
>    }
> }


Tillater kompilatoren din "{}" etter asm? I så fall, tillater den ting
utover standarden, som krever "()".


> int main() {
>       cout<<"DS = "<<get_reg()<<endl;
> }
>
> Men når jeg forsøger at kompile på min FreeBSD puter siger den:
> mem-cpp:8:syntax error before '{'
>
> Så hvad gør jeg galt?


Hvilken kompilator?





ivr
--
<peder> igorr: tcl ja... det er fra de dypeste avgrunnene i helvete det...
<peder> php er bare fra foajeen
            -- pederst på irc

Socketd (13-12-2002)
Kommentar
Fra : Socketd


Dato : 13-12-02 14:10

On Fri, 13 Dec 2002 13:54:04 +0100, Igor V. Rafienko wrote:
>
> Ikke gjør det. Inline assembly skaper bare problemer. Dersom du må ha
> adgang til registrene/andre fasiliteter som er tilgjengelige kun fra
> assembly, skill alt dette ut i en (ekstern) funksjon, som du så kan
> kalle som om det var en vanlig funksjon.

Det er ikke fordi jeg skriver programmer i assembly, jeg bruger det bare
til at forstå VM og buffer overflows.



>> Men når jeg forsøger at kompile på min FreeBSD puter siger den:
>> mem-cpp:8:syntax error before '{'
>>
>> Så hvad gør jeg galt?
>
>
> Hvilken kompilator?

Vi har fået løst problemet, jeg skulle bare bruge asm("tekst");
Men jeg bruger gcc (g++) til FreeBSD.

mvh
socketd

Christian Hemmingsen (13-12-2002)
Kommentar
Fra : Christian Hemmingsen


Dato : 13-12-02 16:02

Socketd <db@traceroute.dk> writes:

> Det er ikke fordi jeg skriver programmer i assembly, jeg bruger det bare
> til at forstå VM og buffer overflows.


Den definitive guide til at forstå buffer overflows må være den
klassiske tekst "Smashing The Stack For Fun And Profit" skrevet af
Aleph One.
Den findes her (og mange andre steder):

http://www.insecure.org/stf/smashstack.txt


--
Christian Hemmingsen

Socketd (15-12-2002)
Kommentar
Fra : Socketd


Dato : 15-12-02 22:59

On Fri, 13 Dec 2002 16:02:17 +0100, Christian Hemmingsen wrote:

> Den definitive guide til at forstå buffer overflows må være den
> klassiske tekst "Smashing The Stack For Fun And Profit" skrevet af Aleph
> One.
> Den findes her (og mange andre steder):
>
> http://www.insecure.org/stf/smashstack.txt

Jeps, den er god

mvh
socketd

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste