|
[讨论]Delphi 程序中的按钮是否没有ID值?
Delphi创建的按钮句柄就是他的ID值。下面是Delphi源代码中按钮生成的其中一部分代码: if (GetWindowLong(FHandle, GWL_STYLE) and WS_CHILD <> 0) and (GetWindowLong(FHandle, GWL_ID) = 0) then SetWindowLong(FHandle, GWL_ID, FHandle); // 在这里Delphi将按钮的ID值改成句柄值。 end; |
|
[求助]如何在动态库中能调用主程序中的函数
通过反汇编找到exe中的函数地址。在dll中直接调用就行了。 typedef void (*PFN)(); PFN pfn; pfn = (PFN)0xxxxxxxxx; // 将exe函数地址传给dll的函数指针 (*pfn)(); // 调用 |
|
[求助]OllyDBG 入门系列(二)-字串参考 字符串长度的疑惑
1、Delphi的String类型字符串有一个特点,那就是字符串首地址减去4的偏移就保存着该字符串的长度。所以[esi-4]和[edi-4]就是字符串的长度。 2、在OD里CPU代码窗口里右击鼠标,选择菜单[复制到可执行文件]/[选择部分或保存全部]命令即可。 |
|
[求助]用RADASM出现了点小问题 求解
你使用了C静态库(libc.lib)函数?建议你使用C动态库(msvcrt.lib)函数。 |
|
[求助][求助]请教高手如何用delphi编写文件补丁??
//大概是这样,没测试。 program pathc; uses windows,messages; var FileName:PChar = 'Crackme5.exe'; AppName:PChar = 'Crackme 5 Pathc'; Done:PChar = 'File patched succesfully!'; NoFile:PChar = 'Can''t find crackme5.exe!'; ReFile:PChar = 'Wrong version of crackme5.exe!'; WrFile:PChar = 'Error writing to crackme5.exe!'; RBuffer:Array[0..1] of Byte = ($75,$15); WBuffer:Array[0..1] of Byte = ($90,$90); OffsetPos:TOVERLAPPED = (Internal:0;InternalHigh:0;Offset:$53f;OffsetHigh:0;hEvent:0); CommandLine:PChar; hwndname:HWND; hFile:THANDLE; Numb:DWORD; Buffer:Array[0..1] of Byte; nType:DWORD; pMsg:PChar; begin hFile := CreateFile(FileName,GENERIC_READ OR GENERIC_WRITE,FILE_SHARE_READ OR FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if hFile <> INVALID_HANDLE_VALUE then begin ReadFile(hFile,Buffer,2,Numb,@OffsetPos); if WORD(Buffer[0]) = Word(RBuffer[0]) then if WriteFile(hFile,WBuffer,2,Numb,@OffsetPos) then begin nType := MB_OK; pMsg := Done; end else begin nType := MB_OK or MB_ICONINFORMATION; pMsg := WrFile; end else begin nType := MB_OK or MB_ICONINFORMATION; pMsg := ReFile; end; end else begin nType := MB_OK or MB_ICONINFORMATION; pMsg := NoFile; end; CloseHandle(hFile); MessageBox(0,pMsg,AppName,nType); ExitProcess(0); end. |
|
|
|
[讨论]要学C++,用哪只C++的编程软件学习为好?
Microsoft Visual C++ |
|
[求助]帮我看下汇编,
and al,0f0h就行了,在汇编中,如果是字母打头的整数都必须在前面加一个0。 |
|
|
|
[求助]类型转换遇到的问题
//这样应该就可以了。 PFile_Header := pImageFileHeader(Cardinal(@Buf) + sizeof(TImageDOSHeader) + 4); |
|
[求助]WriteProcessMemory的奇怪问题
用LPVOID就行了,编译器是按照*.h文件里定义的类型识别的。 |
|
|
|
[求助]基础的问题
or al,al这一句是判断al是否为零,如果为零,则jz @f结束和退出循环。 |
|
[求助]帮我看看这段代码是什么意思
消息回调函数里的wParam和lParam参数是一个不定类型的参数,他的具体类型参数是什么,是由uMsg参数来决定的。当程序获得LBN_SELCHANGE消息时wParam是一个ListBox的ID参数,而lParam则是一个ListBox的窗口句柄参数,所以上面的SendMessage使用lParam参数。 An application sends the LBN_SELCHANGE notification message when the selection in a list box is about to change. The parent window of the list box receives this notification message through the WM_COMMAND message. LBN_SELCHANGE idListBox = (int) LOWORD(wParam); // identifier of list box hwndListBox = (HWND) lParam; // handle of list box |
|
[求助]书上是不是弄错了?
嗯,书上是错了。应该是ChooseColor |
|
[求助]DispatchMessage参数传递的疑问
在消息回调函数里,time和pt成员都是没有的,也不能预他的份,如果你确实要使用这两个成员,你只有在程序的GetMessage那里取得了。 |
|
[求助]DispatchMessage参数传递的疑问
不明白你的什么意思。消息回调函数只有四个参数,而stMsg结构的成员函数也只是特定的六个成员。这些都是必须的,应该不会出现什么会不会多声明的问题。 |
|
[求助]对高高底底原则的困惑.请大侠帮忙解析.
1、 20100地址保存着12H,20101地址保存着34H,也就是20100的下一下地址保存着34H。因为AX是双字变量,所以,AX == 3412,如果是AL单字变量,就是12H了。 mov AL,BYTE PTR [BX] ; AL == 12h mov AX,WORD PTR [BX]; AX == 3412H 2、凭20100是BX的第一个地址。 |
|
[求助]奇怪的加载动态库的方法,请大家帮忙分析下
也没什么奇怪的,将*.lib文件添加入工程,VC可能会向link程序添加该库的链接命令,这是IDE自动实现的。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值