pointer und variablen

04/12/2011 - 20:52 von Jens Kallup | Report spam
Hallo,

wie kann man eine externe (fixed value) variable, die in C als
char ptr_char[1024]; deklariert ist einen Wert (LC1) zuweisen?

Danke für Info's
Jens

http://codepad.org/cnqGuTN7

bits 32
org 0x0

segment code
start:
push ebp
mov ebp, esp

push dword LC1
push dword @teddy
push dword [ebp + 8]
call call_func_entry

leave
ret

call_func_entry:
push ebp
mov ebp, esp

mov eax, dword [ebp + 8] ;
add eax, dword [ebp + 16] ; LC1
mov ebx, dword [ebp + 8] ;
add ebx, dword [ebx + func_entry + 8] ;
mov ebx, dword eax ; char ptr_char[1024];

mov eax, dword [ebp + 8]
add eax, dword [ebp + 12]
push eax

mov eax, dword [ebp + 8]
call dword [eax + func_entry + 4]

pop eax

leave
ret


segment data
LC1: db "Hello You!", 10, 0
LC2: db "My PlugIn", 10, 0

func_table:
@puts: db "puts", 0
@teddy: db "test_func", 0

func_entry:
dd 31102011 ; version
dd 0x6c9414aa ; DLL -> call_func
dd 0x6c9b6a48 ; ptr_char
 

Lesen sie die antworten

#1 Robert Pichler
05/12/2011 - 06:08 | Warnen spam
Am Sun, 04 Dec 2011 20:52:47 +0100
schrieb Jens Kallup :

Hallo,

wie kann man eine externe (fixed value) variable, die in C als
char ptr_char[1024]; deklariert ist einen Wert (LC1) zuweisen?

dd 0x6c9b6a48 ; ptr_char


du hast das ja schon gemacht. woher hast du eigentlich den wert?

add ebx, dword [ebx + func_entry + 8]
mov ebx, dword eax



wenn dein zeiger auf einen gültigen speicherbereich zeigt, kannst du
darauf schreiben. allerdings musst du ebx in eckige klammern setzten.

add ebx, dword [ebx + func_entry + 8]
mov [ebx], dword eax

sollte der speicherbereich, auf den dein zeiger zeigt, wirklich 1024
felder haben (woher hast du 0x6c9b6a48 ?), kannst du mit einem
[ebx+indexregister] und einer schleife, in der das indexregister
pro schleifen durchgang um 1 erhöht wird, durch das feld pflügen.

eigentlich werden solche felder aber anders angelegt.

Ähnliche fragen