#include "stdafx.h "
#include <Windows.h>
unsigned char BitSwapAsm[7] =
{
0x48, 0x8B, 0xC1, // mov rax, rcx
0x48, 0x0F, 0xC8, // bswap rax
0xC3 // retn
};
__int64 (*BitSwap)(__int64 Value) = (__int64 (*)(__int64)) (ULONG_PTR) BitSwapAsm;
int _tmain(int argc, _TCHAR* argv[])
{
//
// I have to change the page protection, otherwise the code would crash
//
DWORD dwOldProtect;
VirtualProtect(BitSwap, sizeof (BitSwapAsm), PAGE_EXECUTE_READWRITE, &dwOldProtect);
printf_s( "%p\n ", BitSwap(0xDDCCBBAA));
getchar();
}
BitSwapAsm是一个字符数组,BitSwap是一个 有一个__int64型的参数且返回值为__int64型的函数的指针。该指针指向BitSwapAsm字符数组。从它的注释来看其中BitSwap主要完成字符串的交换,但是不知道是怎么完成的?
0x48, 0x8B, 0xC1, // mov rax, rcx
0x48, 0x0F, 0xC8, // bswap rax
0xC3 // retn
这样就完成了?
------解决方案--------------------------------------------------------
谁说VC2005不支持汇编了。你不会是创了托管C++吧。
------解决方案--------------------------------------------------------
我是菜鸟,我不懂!
------解决方案--------------------------------------------------------
应该是吧BitSwapAsm强制转换成了一个程序入口吧,执行了里面的三句汇编码?实现了转换?偶是菜鸟,猜的.....
------解决方案--------------------------------------------------------
帮顶
------解决方案--------------------------------------------------------
我想也是这样。。。
但是我想知道 三行字符串怎样是代表了三行汇编语句。
/////////////////////////////////
debug
-u
看机器指令你就明白了。
------解决方案--------------------------------------------------------
帮顶了
------解决方案--------------------------------------------------------
是字节顺序的转换,不是bit转换。
命名有问题。