小编Kar*_*lee的帖子

移位指令比IMUL指令更快吗?

哪一个更快 -

val = val*10;
Run Code Online (Sandbox Code Playgroud)

要么

val = (val<<3) + (val<<2);
Run Code Online (Sandbox Code Playgroud)

imul与移位指令相比,需要多少个时钟周期?

optimization x86 assembly

11
推荐指数
3
解决办法
2965
查看次数

ICE默认IO错误处理程序执行exit(),pid = 11281,errno = 4

我们的一个PyQt应用程序抛出一个关于ICEAuthority的错误,如下所示并退出 -

ICE默认IO错误处理程序执行exit(),pid = 11281,errno = 4

在查看跟踪时,我们看到以下情况 -

write(25, "\1\0\3\200\3\0\0\0\3\0\0\0\t\0\0\0\10\0\0\0\1\0\0\0\377rtStyle", 32) = 32
read(25, 0x16a67f0, 8) = ? ERESTARTSYS (To be restarted)
— SIGCHLD (Child exited) @ 0 (0) —
write(6, "\0", 1) = 1
rt_sigreturn(0x2) = -1 EINTR (Interrupted system call)
write(2, "ICE default IO error handler doi"..., 69) = 69
Run Code Online (Sandbox Code Playgroud)

这看起来像ICEAuthority文件读取操作在处理我们从PyQt应用程序生成的其中一个进程的SIGCHLD后无法重新启动.在谷歌搜索,有很多关于ICEAuthority文件失败的报告,人们建议重新启动系统,删除.ICEAuthority文件,或取消设置SESSION_MANAGER.我们倾向于暂时在PyQt应用程序中取消设置SESSION_MANAGER.但我想了解为什么操作无法重新启动ICEAuthority文件的读取操作.这是gnome会话代码中的错误吗?有人知道吗?

另外我想提一下,我尝试将SA_RESTART设置为false,以便SIGCHLD句柄重新启动操作.这无效.

请在下面找到我们的系统详情 -

Linux nyc-nx-l01.schrodinger.com 2.6.32-358.23.2.el6.x86_64#1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

CentOS版本6.4(最终版)

c unix linux centos6 pyqt5

10
推荐指数
1
解决办法
1万
查看次数

一种从中央存储库加载DLL的方法

我们有很多产品,每个产品的应用程序都有一些常见的DLL.现在我们将每个常见的DLL复制到每个产品的bin目录中,并将它们视为私有程序集.这不必要地增加了每个产品的msi大小,当DLL中出现问题时,我们必须构建包含DLL的每个产品的msi并进行部署.

反正是指示产品应用程序使用公共私有目录来加载DLL [使用manifest scheme ..]?[注意:将私有目录添加到PATH env将不会提供解决方案,就好像SYSTEM目录中存在具有相同名称的DLL一样,这将获取对我们的私人目录的特权]

-Kartlee

c c++ windows dll

9
推荐指数
2
解决办法
4718
查看次数

从32位进程获取64位进程的命令行字符串

下面的代码非常适合从32位应用程序获取32位进程的命令行字符串,从64位应用程序获取64位进程,从64位应用程序获取32位进程.如果我尝试从32位应用程序使用64位进程,这将会中断.原因是PROCESS_BASIC_INFORMATION和地址大小的结构大小差异.所以这是我的问题 -

1)在进程黑客(http://processhacker.sourceforge.net/forums/viewtopic.php?f=15&t=181)中使用wow64函数的建议似乎不起作用并且失败并出现以下错误 -

从A68291A0004028E0读取ProcessParameters地址时出现NtWow64ReadVirtualMemory64错误:8000000D

有没有人试过这个并且可以成功获取信息?我在他们的论坛上发布了同样的问题.

2)是否有其他方法可以查询可以可靠地用于x86和x64的peb信息?

int get_cmdline_from_pid( DWORD dwPid, char** cmdLine )
{
    DWORD dw, read;
    HANDLE hProcess;
    NtQueryInformationProcess* pNtQip;
    PROCESS_BASIC_INFORMATION pbInfo;
    UNICODE_STRING cmdline;
    WCHAR* wcmdLine;

    *cmdLine = NULL;

    hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwPid );
    if( !hProcess )
        return FALSE;

    pNtQip = (NtQueryInformationProcess*) GetProcAddress(GetModuleHandle("ntdll.dll"), 
                                                    "NtQueryInformationProcess");
    if(!pNtQip)
        return FALSE;

    pNtQip(hProcess, PROCESSBASICINFOMATION, &pbInfo, sizeof(pbInfo), NULL);

    #ifdef _WIN64
        ReadProcessMemory(hProcess, pbInfo.PebBaseAddress + 0x20, &dw, sizeof(dw), 
                         &read); 
    #else
        ReadProcessMemory(hProcess, pbInfo.PebBaseAddress + 0x10, &dw, sizeof(dw), 
                          &read); 
    #endif

    #ifdef _WIN64 …
Run Code Online (Sandbox Code Playgroud)

c windows winapi windows-process

9
推荐指数
2
解决办法
8401
查看次数

如何在Perl中正确使用编码为Windows-1251的环境变量?

我在Windows中设置了TEST=abc£一个使用Windows-1252代码页的环境变量.现在,当我运行Perl程序时,test.pl这个环境值正确.

当我调用另一个Perl代码- test2.pltest1.pl无论是system(..)Win32::Process,环境自带乱码.

有人可以提供信息,为什么会这样,以及解决它的方法?

perl我使用的版本是5.8.

如果我的理解是正确的,在perl内部使用utf-8,那么初始过程 - test1.plWindows-1252→ 收到它utf-8.当我们调用另一个进程时,我们应该转换回Windows-1252代码页吗?

windows perl character-encoding

6
推荐指数
1
解决办法
1896
查看次数

C和C++的优化工具

我可以使用哪些Windows和Linux系统工具来确定对齐问题,缓存未命中以及与Visual C++和GCC生成的代码相关的其他参数?我可以使用这些工具来确定结构的对齐方式,这样我就可以避免编译器生成的填充吗?

c c++ optimization gcc visual-studio

5
推荐指数
1
解决办法
2579
查看次数

Linux内核线程 - 调度程序

Linux内核调度程序是init进程的一部分吗?我的理解是它是内部管理的内核线程的一部分,用户不能通过top或ps看到.请纠正我的理解.

是否可以通过任何内核调试器查看标准内核线程,以查看标准线程如何占用cpu活动?

-Kartlee

linux kernel linux-kernel

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

ZwQuerySystemInformation / NtQuerySystemInformation-系统信息类别5

对于32位Windows,以下_SYSTEM_PROCESSES结构声明(系统信息类5)ZwQuerySystemInformation可以很好地用于构建进程树。

typedef struct _SYSTEM_PROCESSES   
{ // System Information Class 5  

     ULONG           NextEntryDelta;   
     ULONG           ThreadCount;  
     ULONG           Reserved1[6];  
     LARGE_INTEGER   CreateTime;  
     LARGE_INTEGER   UserTime;  
     LARGE_INTEGER   KernelTime;  
     UNICODE_STRING  ProcessName;  
     ULONG           BasePriority;  
     ULONG           ProcessId;  
     ULONG           InheritedFromProcessId;  
     ULONG           HandleCount;  
     ULONG           Reserved2[2];  
} SYSTEM_PROCESSES, * PSYSTEM_PROCESSES;  
Run Code Online (Sandbox Code Playgroud)

另一方面,它在64位Windows中无法正常运行。如果我声明ProcessIdULONG64,则用于的数据ProcessId正确。为上述结构定义的数据类型是否适用于Windows-64?

windows sdk winapi windows-vista

3
推荐指数
1
解决办法
4751
查看次数

如何获取Windows中的操作系统名称、版本?

在 Windows 中获取操作系统名称、操作系统版本在以下方面哪一个更好 -

  1. 获取信息的时间
  2. 兼容所有 Windows 操作系统,如 xp、vista 及更高版本

systeminfo 还是 wmic 命令?我想避免在 C 中使用 OSVersionInfoEx,因为必须对营销名称检测进行硬编码,并且如果引入新风格的 Windows,则会增加维护工作。请分享您的意见。

c windows sdk

3
推荐指数
1
解决办法
3801
查看次数

VS2010 C代码 - 字符串池

当您使用以下标志进行编译时,VS 2010中的代码崩溃,如果添加/ GF-或删除opimization标志,它们不会崩溃.崩溃发生在汇编代码中,该代码转换为'if(path [i] =='/')'.我喜欢理解编译器在这里做的优化并导致崩溃.期待一些指示.

-Karthik

cl.exe /MD /O2 test.c

// TEST.C

#include <stdio.h>

#include  <string.h>

void testpath(char* path, int bufsiz)  
{  

    int i;  

    printf("%p\n", path);  
    for( i=0; i < strlen(path); i++ ) {  
      if( path[i] == '/' ) {  
         path[i] = '\\';  
     }  
  }  
}

int main()  
{  

    const char* path = "testexport.prj";  
    char *path1 = "testexport.prj";  
    printf("%p\n", path);  
    printf("%p\n", path1);  
    testpath(path, 1024);  
}  
Run Code Online (Sandbox Code Playgroud)

c c++ winapi visual-studio-2010 visual-studio

1
推荐指数
2
解决办法
2267
查看次数

符号链接限制 - Windows

我正在尝试测试为 Visa 中的符号链接提到的 31 重解析点限制。但是我无法通过以下列出的任何案例进行复制。有人可以指导吗?

1) 在目录 c:\temp\testlink 中为驻留在 c:\temp\testlink 中的可执行文件创建了 36 个符号链接。

2) 在目录 c:\temp\testlink 中创建了 36 个符号链接,指向位于 c:\temp\testlink 中的 36 个不同的可执行文件。

3) 在目录 c:\temp1 中为驻留在 c:\temp\testlink 中的 36 个不同的可执行文件创建了 36 个符号链接。

此限制在 Windows 7 和 2008 中有何作用?

-卡蒂克

windows winapi windows-vista windows-7

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

为每个线程重定向stdout/stderr

我喜欢将每个线程的stdout输出重定向到文件.以下代码将所有线程输出重定向到单个文件 -

int fd = open(<filename_threadid.txt>, <flags>)
_dup2(fd, 1)
Run Code Online (Sandbox Code Playgroud)

我应该如何恢复原始标准输出,以便下一个线程能够可靠地将其标准输出映射到filename_threadid?

c c++ multithreading

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