[C++] Dll-t írok ami egy DetourFunctionnal egy memóriacímre rákapcsolódik és a memóriacím (funkció) argumentjeivel dolgozom a dll-ben. (Többi lent) Valami ötlet?
IDA Pro-val nézegetem és a funkcióban van loggolás és ott is leloggolja az Integer változót de ott rendesen (0,1,2,3,4, . ). Viszont amikor én akarom kivenni akkor egy 6-7 karakteres számot ad.
Amit a log ad vissza:24403392;text
Amit kéne(azaz amit a funkcióban loggol):12;text
C++ kód:
unsigned long v8 = a1; //a1 -> a bizonyos argument
sprintf(buf, "%d;%s\n", v8, "text");
myLog(buf);
(...)
Assemblyben ez található(Pseudo code):
v8 = *(_DWORD *)a1; //lehet ezzel a _DWORD-al van valami..
//A köv sor a loggolás.
sub_123ABC("%d;%s", v8, a4); //a4 -> "text"
(...)
Köszönöm a segítséget előre is.
Gondolom az a probléma, hogy a1 egy mutató, és te a memóriacímet iratod ki, amire mutat.
Ha megnézed a pszeudokódban (ami ugye csak lopott (netán vett?!) IDA-ban van, ha jól tudom), ott a typecast előtt a csillagocska, ami azt jelenti, hogy a mutató által mutatott hely értékét veszi.
Tehát a megoldás:
unsigned long v8 = *a1;
>ma 13:37
nice
Köszi a választ, de a VC++ hibát ír a megoldásodra mivel az a1-nek pointernek kéne lennie.
("IntelliSense: operand of '*' must be a pointer")
int MY_SUBF_502820(int a1, int a2, int a3, char *a4)
{
unsigned long v8 = *a1;
(...)
Akkor
unsigned long v8 = *(int *)a1;
Már jó és köszi a segítséget :)
Így:
int MY_SUBF_502820(int *a1, int a2, int a3, char *a4)
{
unsigned long v8 = *a1;
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!