inline assembler



  • hallo leute
    ich weiß des gehört hier net so ganz hin, aber ein wenig schon 😉

    is will folgenden code in _asm übersetzen

    #include <windows.h>
    
    void mymain() {
        int str = 'dmc';
        WinExec((char*) &str,SW_SHOW);
    }
    
    void main() {
    }
    

    was ja eigendlich kein problem ist, jedoch würde ich gerne das 'cmd'
    in ein
    db String umwandeln , jedoch unterstüzt das der inline assembler nicht, oder habe ich da nur einen syntax fehler?!?!?
    hat jemand von euch da erfahrungen???



  • [ Dieser Beitrag wurde am 22.05.2003 um 19:17 Uhr von MaSTaH editiert. ]



  • Es ist zwar erlaubt aber ich bezweifle dass der Code das macht was du willst...

    BTW: "void main()" sollte man nicht machen. Lieber "int main()"

    [ Dieser Beitrag wurde am 22.05.2003 um 18:25 Uhr von MaSTaH editiert. ]



  • Ich hab dir mal ein Stück disassembly gepostet:

    void mymain() {

    push        ebp
    mov         ebp,esp
    sub         esp,44h
    push        ebx
    push        esi
    push        edi
    lea         edi,[ebp-44h]
    mov         ecx,11h
    mov         eax,0CCCCCCCCh
    rep stos    dword ptr [edi]
    

    int str = 'dmc';

    mov         dword ptr [ebp-4],646D63h
    

    WinExec((char) &str,SW_SHOW);*

    mov         esi,esp
    push        5
    lea         eax,[ebp-4]
    push        eax
    call        dword ptr [__imp__WinExec@8 (0041a66c)]
    cmp         esi,esp
    call        _chkesp (004046dc)
    

    }

    pop         edi
    pop         esi
    pop         ebx
    add         esp,44h
    cmp         ebp,esp
    call        _chkesp (004046dc)
    mov         esp,ebp
    pop         ebp
    ret
    

    [ Dieser Beitrag wurde am 22.05.2003 um 18:33 Uhr von MaSTaH editiert. ]



  • jo danke
    aber des war net meine frage .

    wie man hier sieht

    mov dword ptr [ebp-4],646D63h

    kann man nur immer 3 bytes moven.

    ich hätte aber gerne einen string gemacht mit

    DB String

    geht das mit dem vc++ inline assembler ????
    wenn ja wie



  • Meinst du sowas hier?

    mov      dword ptr[ebp-4],offset string "cmd" (00417b7c)
    

    Hab ich aus dem disassembly wenn man mit const char* anstatt int arbeitet.

    Wenn nein: Kannst du etwas konkreter werden oder dich an das Assembler Forum wenden?



  • Warum willst du das eigentlich in ASM machen anstatt in C++???



  • weil ich in meinen c code ein stückchen asm-code brauche( in einen char array)
    also
    char code[]="\x55\x8b\blablabla";
    aber das problem ich will den string zur LAUFzeit ändern also muss der sting in dem asm-code sein und nicht wie bei
    mov dword ptr[ebp-4],offset string "cmd" (00417b7c)
    in der data section.
    geht das irgendwie ????



  • Achso, jetzt weiß ich was du meinst: Du willst mit DefineByte (DB) arbeiten...

    // Sowas geht nicht
    __asm CmdString db "cmd";
    

    [ Dieser Beitrag wurde am 22.05.2003 um 19:24 Uhr von MaSTaH editiert. ]


Anmelden zum Antworten