小编Gog*_*a70的帖子

自修改代码[C++]

我正在阅读关于自修改代码的密码破解者期刊文章,并且有以下代码片段:

void Demo(int (*_printf) (const char *,...))
{ 
      _printf("Hello, OSIX!n"); 
      return; 
} 
int main(int argc, char* argv[]) 
{ 
  char buff[1000]; 
  int (*_printf) (const char *,...); 
  int (*_main) (int, char **); 
  void (*_Demo) (int (*) (const char *,...)); 
  _printf=printf; 
  int func_len = (unsigned int) _main ­- (unsigned int) _Demo; 
  for (int a=0; a<func_len; a++) 
    buff[a] = ((char *) _Demo)[a]; 
  _Demo = (void (*) (int (*) (const char *,...))) &buff[0]; 
  _Demo(_printf); 
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

这段代码应该在堆栈上执行Demo().我理解大部分代码,但是他们分配'func_len'的部分让我困惑.据我所知,他们从另一个随机指针地址中减去一个随机指针地址.

有人在意解释?

c++ self-modifying

5
推荐指数
2
解决办法
7578
查看次数

使DrawText打破一个字符串

因此,如果字符串有空格,或者如果我在字符串的末尾放入\ r \n,我可以使drawtext断开字符串.但是,一个没有空格或换行符的长字符串会继续经过绘图矩形并被剪裁.如果可能的话,我想防止这种情况发生.

drawtext的格式标志中没有任何内容能够突显我的意义.有任何想法吗?

c++ winapi drawtext

5
推荐指数
2
解决办法
5896
查看次数

SetFocus() 因有效的窗口句柄而失败

我有一个包含多个自定义控件的程序。这些自定义控件之一是文本输入控件。由于窗口在您单击时不会自动接收键盘焦点,因此我在我的程序中创建了一个鼠标钩子,当用户在该窗口中单击时,该钩子会在该窗口上调用 SetFocus()。但是,有一个问题。

如果单击我的程序窗口(或该窗口中的任何控件)时另一个程序具有焦点,则 SetFocus() 失败。然后我必须再次单击它才能成功。这是代码:

LRESULT CALLBACK kbfProc(int nCode, WPARAM wParam, LPARAM lParam) // Keyboard focus switching procedure
{
    switch(nCode)
    {
        case HC_ACTION:
        {
            if(wParam == WM_LBUTTONDOWN || wParam == WM_NCLBUTTONDOWN)
            {
                MOUSEHOOKSTRUCT * mhs = (MOUSEHOOKSTRUCT*) lParam;

                if(SetFocus(mhs->hwnd) == NULL)
                {
                    printf("SetFocus(Hwnd = %.8x) failed. Error code: %lu\n", mhs->hwnd, GetLastError());
                } else {

                    printf("SetFocus(Hwnd = %.8x) returned success.\n", mhs->hwnd);
                }
            }

        }
        break;
    }

    return CallNextHookEx(0, nCode, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)

这些 printf 调用的输出是这样的:

SetFocus(Hwnd = 00410c06) failed. Error code: …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

4
推荐指数
1
解决办法
8785
查看次数

标签 统计

c++ ×3

winapi ×2

drawtext ×1

self-modifying ×1