刚好也看到这里,发现有些问题不大懂,学习了下两位的帖子
用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
反汇编结果
不明白为什么会变成这样,
源文件中并未包含对出栈操作的考虑,程序为何会这样变动达到堆栈平衡的?