刚好也看到这里,发现有些问题不大懂,学习了下两位的帖子
用OD跟踪了一下,执行如下:
1 .fild dwCenterX st(0)<--dwCenterX
2 .fild _dwDegree st(0)<--_dwDegree, st(1)<--dwCenterX
3 .fldpi st(0)<--pi, st(1)<--_dwDegree, st(2)<--dwCenterX
4 .fmulp st(1),st st(0)<--pi*_dwDegree, st(1)<--dwCenterX
5 .fild _dwPara180 st(0)<--180, st(1)<--pi*_dwDegree, st(2)<--dwCenterX
6 .fdivp st(1),st st(0)<--pi*_dwDegree/180, st(1)<--dwCenterX
7 .fsin st(0)<--sin(pi*_dwDegree/180), st(1)<--dwCenterX
8 .fild _dwRadius st(0)<--_dwRadius, st(1)<--sin(pi*_dwDegree/180), st(2)<--dwCenterX
9 .fmulp st(1),st st(0)<--_dwRadius*sin(pi*_dwDegree/180), st(1)<--dwCenterX
10.faddp st(1),st st(0)<--dwCenterX+_dwRadius*sin(pi*_dwDegree/180)
11.fistp @dwReturn @dwReturn=dwCenterX+_dwRadius*sin(pi*_dwDegree/180)
其中第4、9、10三行变化如下:
4 .
fmul 原文件
fmulp st(1),st 反汇编结果
9 .
fmul 原文件
fmulp st(1),st 反汇编结果
10.
fadd 原文件
faddp st(1),st 反汇编结果
不明白为什么会变成这样,
源文件中并未包含对出栈操作的考虑,程序为何会这样变动达到堆栈平衡的?