我使用Code::Blocks进行编码,但我引用的其中一个代码来自Visual C++,所以我很难理解区别…:(
完整的代码在这里
NAKED void ijlWrite()
{
__asm {
PUSH EBP
MOV EBP, ESP
MOV EAX, DWORD PTR SS:[EBP+8h]
MOV ECX, ssQuality
MOV DWORD PTR DS:[EAX+50h], ECX
MOV EDX, DWORD PTR SS:[EBP+0Ch]
PUSH EDX
MOV EAX, DWORD PTR SS:[EBP+08h]
PUSH EAX
CALL lpfnIJLWrite //a global variable
POP EBP
RETN
}
}
如果你能把它们全部翻译出来,我将不胜感激。
第页。S.我也不知道如何翻译RETN。怎么做?备忘单没有这样的东西:(
难道不能用C++编写函数吗?多一点类型信息会有所帮助,但这个怎么样?
void ijlWrite(int* p, int i)
{
p[80] = ssQuality;
lpfnIJLWrite(p, i);
}
MOV EAX, DWORD PTR SS:[EBP+8h]
相当于
movl %ss:8(%ebp), %eax
只要交换源和目的地的顺序,DWORD
就会转换为l
后缀。%ss:
前缀是绝对不必要的,这是使用基于EBP
的内存访问时的默认前缀。
我认为是
movl %ss:8(%ebp), %eax
请参阅此以获取快速参考。