大家帮帮忙?看看这是什么意思?

lamue 2007-05-30 10:32:26
#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
这样就完成了?
...全文
464 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
是字节顺序的转换,不是bit转换。
命名有问题。
lamue 2007-06-05
  • 打赏
  • 举报
回复
我了解了。。。。。
tks。
g_w_b 2007-06-05
  • 打赏
  • 举报
回复
帮顶了
hkbyest 2007-06-05
  • 打赏
  • 举报
回复
我想也是这样。。。
但是我想知道 三行字符串怎样是代表了三行汇编语句。
/////////////////////////////////
debug
-u
看机器指令你就明白了。
lamue 2007-06-04
  • 打赏
  • 举报
回复
why no answer?
lamue 2007-06-02
  • 打赏
  • 举报
回复
day day up
jackiehb 2007-06-01
  • 打赏
  • 举报
回复
帮顶
lamue 2007-05-31
  • 打赏
  • 举报
回复
up ~
lamue 2007-05-31
  • 打赏
  • 举报
回复
少说了一句,是64bit下,vs2005下不支持内联汇编。
taodm 2007-05-31
  • 打赏
  • 举报
回复
谁说VC2005不支持汇编了。你不会是创了托管C++吧。
lamue 2007-05-31
  • 打赏
  • 举报
回复
up again
lamue 2007-05-31
  • 打赏
  • 举报
回复
我想也是这样。。。
但是我想知道 三行字符串怎样是代表了三行汇编语句。
zycy 2007-05-31
  • 打赏
  • 举报
回复
应该是吧BitSwapAsm强制转换成了一个程序入口吧,执行了里面的三句汇编码?实现了转换?偶是菜鸟,猜的.....
shuangyp 2007-05-31
  • 打赏
  • 举报
回复
我是菜鸟,我不懂!
Dukee 2007-05-30
  • 打赏
  • 举报
回复
不懂
帮顶...
lamue 2007-05-30
  • 打赏
  • 举报
回复
再说明一下,这是在VC2005下改造内联汇编的一种方法,因为VC2005不再支持内联汇编。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧