|
[求助]关于0D和反汇编的一些疑问
VC的默认真正入口函数是叫WinMainCRTStartup(mainCRTStartup),而不是你的WinMain(main)函数,在这个函数里VC会初始化各种数据,之后才会调用你写的的WinMain(main)函数,所以你的程序才会有那么多代码。 |
|
[求助]Win32 Application
创造一个资源文件(*.rc),在资源文件中添加一个图标文件(*.icon),保存文件。 再在VC中的FileView窗口的Resource Files目录中添加创造好的资源文件就行了。 |
|
[讨论]刪掉一個區可否先通知一下
前面三楼的三个大牛在线时长都比我高级。 |
|
[求助]masm32编程,如何给一个对话框添加菜单
可以直接在资源编辑器里生成菜单,然后再在对话框属性里添加菜单到对话框上。 |
|
|
|
|
|
[求助]RadAsm下用ShellExecute打开chm文件 编译通不过
; 试试下面。 include shell32.inc includelib shell32.lib .data szOpen db 'open',0 szChmName db 'a.chm',0 .code invoke ShellExecute,hWnd,offset szOpen,offset szChmName,NULL,NULL,SW_MAXIMIZE |
|
[已经解决]请问(void **)是怎么回事?
那是无类型指针的无类型指针变量,API函数定义中已经说明了((void **)和(LPVOID *)是同样的类型)。 STDAPI CoCreateInstance( REFCLSID rclsid, //Class identifier (CLSID) of the object LPUNKNOWN pUnkOuter, //Pointer to controlling IUnknown DWORD dwClsContext, //Context for running executable code REFIID riid, //Reference to the identifier of the interface LPVOID * ppv //Address of output variable that receives // the interface pointer requested in riid ); |
|
|
|
[求助]求一汇编对应的算法
二楼已经回答你了,那些代码就是VC优化后的memcpy函数代码(在VC中你调用memcpy函数后用Release版本编译后VC就会编译出你上面的代码了)。 |
|
[原创]纯C实现多页面山寨浏览器(KsBinExplorer)
期待你的完整版本。 |
|
[求助]这段代码哪里有问题?
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam) { HANDLE hIns = GetCurrentProcess(); DWORD lpdwProcessId=NULL; GetWindowThreadProcessId(hwnd,&lpdwProcessId); HANDLE hInsB=OpenProcess(PROCESS_ALL_ACCESS,FALSE,lpdwProcessId); if (hIns==hInsB) { if(!SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE)) { MessageBox(hwnd,"error","error",MB_OK); } CloseHandle(hInsB); } return true; } BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad) { if (fdwReason == DLL_PROCESS_ATTACH) { EnumWindows(EnumWindowsProc, 0); } return(TRUE); } |
|
[求助]问一个很菜的问题
你觉的你的程序有加加密狗效益成本那就加吧。 |
|
[求助]问一个窗口最小化的问题?
给程序最小化有可能的操作就是下面的函数。 SendMessage或PostMessage(hVCWnd,WM_SYSCOMMAND,SC_MINIMIZE,0); ShowWindow(hVCWnd,SW_HIDE); |
|
[求助]汇编小问题
如果是说汇编编程的话,如果KeServiceDescriptorTable变量在汇编编程中被定义成db和dw类型,编译程序就会编译不过去,如果KeServiceDescriptorTable变量在汇编编程中被定义成dd类型的话,他们就没有任何区别。因为对编译程序来说,mov eax,KeServiceDescriptorTable和mov eax,DWORD PTR KeServiceDescriptorTable是同一个操作,只是一个显示声明,一个没有显示声明。不过程序编译后都是同样的操作。 |
|
[求助]请教小虾版主,小虾请进。
高端位和低端位不是按内存地址来看的,而是按整数数值来看的。如你的数0x00003245,此时在你看到32是在千位百位,所以是属高位,45在十位个位,所以是属于低位。而存入内存地址之后,这个数如果你再用整数值来看的话,你就会看成是0x45320000(xxxxxxxx 45 32 00 00)的整数来看,此时45在千万位的位置,所以45从整数值来看就是属于高端位了,而32是十万位,从整数值来看就是低位了。 |
|
[求助]Call后面的Jnz
这样的比较一般都是在函数里面进行了比较,你只需追进函数里面就可以找到,而且一般都出现在函数的尾部不远处。如: func .....其它操作 cmp eax,edx ret func_end call func jnz xxxxxxxx |
|
[求助]用C语言查看内存
你会无法理解的原因是:你将char类型的单字节类型和int类型的多字节类型来进行对比是无法理解的,在char单字节类型之中是没有高端低端之分的,因为他只有一个字节。而在int多字节类型中才有高端低端之分。所以,对于i变量来说,内存中的xxxxxxxx 45 32 00 00(45320000)已经将45放到高端位置了,而对于char变量类型来说,内存中xxxxxxxx指向的数据没有高低之分,只有当前字节之分,所以对于char来说xxxxxxxx 45 32 00 00,45是第一个字节,32是第二个字节。。。。 |
|
[求助]用C语言查看内存
程序没有错,是0x45在低字节,0x32在高字节。你上面的程序被编译之后就会变成: i = 0x3245; xxxxxxxx mov DWORD ptr [i],00003245; 而在内存中布局就会变成下面那样。 xxxxxxxx 45 32 00 00 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值