Hallo erstmal!
Ich bin neu hier und hab sehr wenig erfahrung in asm, aber will es unbedingt lernen :cool: .
Zu meiner Frage:
Ich füre ein Programm mit:
invoke WinExec,ADDR Prozess,SW_HIDE
aus.
In Prozess steht die exe jetzt müssen aber noch zwei variabeln dazu.
Also sollte das so sein:
invoke WinExec,ADDR Prozess + LEERZEICHEN + Para1 + LEERZEICHEN+ Para2 ,SW_HIDE
Das darf ich aber leider nicht.
Wie speicher ich vorher alles in einer Variable???
PS: Para1 und Para2 werden jeweils aus einer Editbox geladen.
MfG
IceOnly
Jan Krüger
22.12.2004, 21:34
Mit der StrCat-Funktion aus der Windows-API kannst du mehrere Strings zu einem zusammenfügen (dafür musst du einen Buffer allokieren).
butterkeks
22.12.2004, 22:21
strcat kommt aber aus der C API (libc); Das Windows API Äquivalent ist lstrcat().
Das ist wichtig, weil du für libc Funktionen noch die msvcrt.lib bzw. libc.lib (weiß net mehr genau, worin der Unterschied zwischen ihnen lag) mitlinken musst
Danke!
Aber irgendwas mach ich falsch :( .
Der verbindet die nicht richtig :confused: .
Hier mein Sourcecode:
TITLE NetSend Tool
.586
.MODEL flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\shell32.inc
includelib \masm32\lib\shell32.lib
include comctl32.inc
includelib comctl32.lib
DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDD_MAIN equ 1000 ;Das Fenster
IDB_EXIT equ 1001 ;Close Buttom
IDB_SEND equ 1002 ;Sende Button
IDC_COMP equ 1003 ;Ziel host
IDC_MESSAGE equ 1004 ;Nachricht
.DATA
Prozess DW ?,0
Para DW ?,0
.data?
hInstance dd ?
.CODE
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke InitCommonControls
invoke DialogBoxParam, hInstance, IDD_MAIN, 0, offset DlgProc, 0
invoke ExitProcess, eax
DlgProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,uMsg
.if eax == WM_INITDIALOG
invoke LoadIcon,hInstance,200
invoke SendMessage, hWin, WM_SETICON, 1, eax
.elseif eax == WM_COMMAND
mov eax,wParam
.if eax == IDB_EXIT
invoke SendMessage, hWin, WM_CLOSE, 0, 0
.endif
mov eax,wParam
.if eax == IDB_SEND
invoke GetDlgItemText,hWin,IDC_MESSAGE,ADDR Para,255
invoke GetDlgItemText,hWin,IDC_COMP,ADDR Prozess,255
invoke lstrcat,Para,Prozess ;Strings verbinden
invoke MessageBox,hWin,ADDR Para, ADDR Prozess,0 ;Dient erstmal nur zum Test
;invoke WinExec,ADDR Prozess,SW_HIDE ;Soll später die Messages schicken
.endif
.elseif eax == WM_CLOSE
invoke EndDialog, hWin, 0
.endif
xor eax,eax
ret
DlgProc endp
end start
butterkeks
23.12.2004, 14:57
So, wie das da steht, reservierste nur je 4 byte für deine beiden Strings, was eindeutig zu wenig ist.
Du brauchst zum einlesen und verbinden der Strings ncoh etwas Platz dahinter; Probier's mal so:
; ...
.DATA
; Puffer, der einen String mit 254 Zeichen länge halten kann.
; Das letzte Zeichen ist immer die binäre Null, die jedoch von
; Windows automatisch angehangen wird.
; Brauchst die Null also nicht manuell zu setzen!
Prozess DB 255 DUP(?)
Para DB 255 DUP(?)
; ...
Kann sein, dass es im MASM anders gemacht wird; kann mich jetzt nicht genau erinnern
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.