Bonjour,
Je cherche à reproduire l'instruction RCL , mais je n'y arrive pas.
Pour les instruction SHR,SAR,ROL,ROR,SAL,SAR , j'y suis arriver.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 void _emurol(PPROCESSOR pp,DWORD &v,BYTE imm8,BYTE _eb) { if (imm8==0) return; DWORD eb=e2pb(_eb); BYTE count=imm8; DWORD _v=v; DWORD *flags=pp->registers.eflags; BYTE tmpcf=0; while (count!=0) { tmpcf=((_v&eb)==eb); _v<<=1; _v+=tmpcf; count--; } //debug if (tmpcf==0) (*flags)&=~LF_MASK_CF; else (*flags)|=LF_MASK_CF; if (imm8==1) { BYTE otmpcf=((_v&eb)==eb); if (otmpcf!=tmpcf) (*flags)|=LF_MASK_OF; else (*flags)&=~LF_MASK_OF; } v=_v; } void _emurcl(PPROCESSOR pp,DWORD &v,BYTE imm8,BYTE _eb) { if (imm8==0) return; DWORD *flags=pp->registers.eflags; BYTE tmpcf=((*flags)&LF_MASK_CF)==LF_MASK_CF; DWORD eb=e2pb(_eb); BYTE count=imm8; DWORD _v=v; _emurol(pp,_v,imm8-1,_eb); _v<<=1; _v|=tmpcf; if (imm8==1) { BYTE otmpcf=((v&eb)==eb); if (otmpcf!=tmpcf) (*flags)|=LF_MASK_OF; else (*flags)&=~LF_MASK_OF; } v=_v; }
La fonctions _emurol est bon , mais pas la fonction _emurcl.
Info structure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #define LF_MASK_CF 0x01 #define LF_MASK_AF 0x10 #define LF_MASK_ZF 0x40 #define LF_MASK_SF 0x80 #define LF_MASK_PF 0x04 #define LF_MASK_OF 0x800 #define LF_MASK_DF 0x400 typedef struct { //.... DWORD _eflags; //.... DWORD *eflags; //.... }TREGISTERS; typedef struct { //.... TREGISTERS registers; //..... }TPROCESSOR,*PPROCESSOR;
merci de votre aide.
Partager