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