The compound assignment operators consist of a binary operator and the simple assignment operator. They perform the operation of the binary operator on both operands and store the result of that operation into the left operand, which must be a modifiable lvalue. So lets go: transform this snippet back to C++ code!
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 | .text:00401000 _main proc near .text:00401000 .text:00401000 var_C= dword ptr -0Ch .text:00401000 var_8= dword ptr -8 .text:00401000 var_4= dword ptr -4 .text:00401000 argc= dword ptr 8 .text:00401000 argv= dword ptr 0Ch .text:00401000 envp= dword ptr 10h .text:00401000 .text:00401000 push ebp .text:00401001 mov ebp, esp .text:00401003 sub esp, 0Ch .text:00401006 mov [ebp+var_4], 5 .text:0040100D mov [ebp+var_8], 6 .text:00401014 mov [ebp+var_C], 9 .text:0040101B mov eax, [ebp+var_4] .text:0040101E add eax, 6 .text:00401021 mov [ebp+var_4], eax .text:00401024 mov ecx, [ebp+var_8] .text:00401027 sub ecx, 5 .text:0040102A mov [ebp+var_8], ecx .text:0040102D mov edx, [ebp+var_C] .text:00401030 imul edx, 3 .text:00401033 mov [ebp+var_C], edx .text:00401036 xor eax, eax .text:00401038 mov esp, ebp .text:0040103A pop ebp .text:0040103B retn .text:0040103B _main endp |
Transformed code will probably look like this:
int main(int argc, char *argv[]){
int var_4,var_8,var_C;
var_4 = 5;
var_8 = 6;
var_C = 9;
var_4 = var_4 + 6;
var_8 = var_8 – 5;
var_C = var_C * 3;
return 0;
}
Woops, I forgot envp :)
int main(int argc, char *argv[], char *envp){
int var_4,var_8,var_C;
var_4 = 5;
var_8 = 6;
var_C = 9;
var_4 = var_4 + 6;
var_8 = var_8 – 5;
var_C = var_C * 3;
return 0;
}
I agreed with |sas0| ‘ result.