小编Nic*_*lin的帖子

如何查看Windows库的内容(*.lib)

我有一个二进制文件 - Windows静态库(*.lib).
有没有一种简单的方法可以从该库中找出函数及其接口的名称?

类似于emfarelfdump实用程序(在Linux系统上)?

windows static-libraries libraries

165
推荐指数
7
解决办法
16万
查看次数

get_FIELD_display(在django中)如何工作?

我是Django和Python的新手,最近在Django文档中遇到了很多方法,比如Model.get_FOO_display().帮助页面说您可以用FOO替换字段的名称.我一直在试图弄清楚Python中的可能性,并研究了"模型"类源.在那里我遇到了这个:

    def _get_FIELD_display(self, field):
        value = getattr(self, field.attname)
        return force_unicode(dict(field.flatchoices).get(value, value), strings_only=True)
Run Code Online (Sandbox Code Playgroud)

我无法理解在Python中如何可能:1)写这个

class Person(models.Model):
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
p = Person(name='John', gender='M')

p.get_gender_display()
Run Code Online (Sandbox Code Playgroud)

那么,Python如何将FIELD(或FOO)改为性别?它是某种Python'邪恶的'符号吗?(对不起,我不能问清楚)Coud你指向一些Python手册页?

2)为什么来自Model类的源使用前导下划线声明_get_FIELD_display(),但是上面的Python doc extract会在没有下划线的情况下写入"p.get_gender_display()"?再次,你能为此给出一个Python手册页吗?

python django

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

无限的abort()在c ++程序核心转储的后台

我有一个我无法解决的奇怪问题.请帮忙!

该程序是一个在ARM Linux机器上运行的多线程c ++应用程序.最近我开始长时间测试它,有时它会在1-2天之后崩溃,如下所示:

*** glibc detected ** /root/client/my_program: free(): invalid pointer: 0x002a9408 ***
Run Code Online (Sandbox Code Playgroud)

当我打开核心转储时,我看到主线程似乎有一个损坏的堆栈:我只能看到无限的abort()调用.

GNU gdb (GDB) 7.3 
...
This GDB was configured as "--host=i686 --target=arm-linux".
[New LWP 706]
[New LWP 700]
[New LWP 702]
[New LWP 703]
[New LWP 704]
[New LWP 705]
Core was generated by `/root/client/my_program'.
Program terminated with signal 6, Aborted.
#0  0x001c44d4 in raise ()
(gdb) bt
#0  0x001c44d4 in raise ()
#1  0x001c47e0 in abort ()
#2  0x001c47e0 in abort () …
Run Code Online (Sandbox Code Playgroud)

c++ linux embedded coredump

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

如何触发或模拟键盘中断?

我正在为Windows编写键盘过滤器驱动程序,我需要将自定义击键数据插入Windows消息队列.我已经设法捕获所有按下的键,在我的驱动程序的Read()函数中将OnReadCompletion()回调设置为IoSetCompletionRoutine(),如下所示:

NTSTATUS Read(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
    PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension;

    IoCopyCurrentIrpStackLocationToNext(Irp);
    IoSetCompletionRoutine(Irp, OnReadCompletion, DeviceObject, TRUE, TRUE, TRUE);
    return IoCallDriver (deviceExtension->pKeyboardDevice, Irp);
}

NTSTATUS OnReadCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)

此过滤器驱动程序附加到kbdclass驱动程序,如下所示:

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
// ...
CCHAR ntNameBuffer[64] = "\\Device\\KeyboardClass0";
status = IoAttachDevice(deviceObject, &uKeyboardDeviceName, &DeviceExtension->pKeyboardDevice);
// ...
Run Code Online (Sandbox Code Playgroud)

}

所以,我可以捕获OnReadCompletion()中按下的所有键.但我需要将自己的信息插入键盘消息流中.这有两个问题:

  1. OnReadCompletion()仅在按下某个键时调用.理想情况下,我想以某种方式在没有按下时调用它.我能以某种方式这样做吗?我需要触发键盘中断吗?我尝试使用WRITE_PORT_UCHAR()将命令写入键盘端口(0x60和0x64)但是没有用完.

  2. 我试图在OnReadCompletion()中将我的数据插入到IRP中,使其看起来像一个按键被按下两次,而实际上只按了一次.也有人可以帮我解决这个问题,因为下面没有成功吗?

    NTSTATUS OnReadCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
    {
        PIO_STACK_LOCATION IrpStackLocation = NULL; …
    Run Code Online (Sandbox Code Playgroud)

c windows drivers

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

如何在c ++程序中实现类似于linux/proc/version的功能?

我有一个在嵌入式系统上运行的C++程序.当客户端遇到问题时,他会向我发送一个日志文件.很高兴看到二进制文件在日志中的确切构建时间.所以,目前我使用这种简单但非常无效的方法:

...

const std::string APP_BUILD = "2012.01.17.18:28";

int main()
{
     std::cout << "Was built: " << APP_BUILT << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我想做的是在构建期间自动设置APP_BUILD.我知道Linux有/ proc/version变量可以读取以确定构建时间.我的读物

cat /proc/version
Linux version 2.6.38-13-generic (buildd@allspice) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) ) #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?(我正在Linux中构建我的应用程序).

c++ linux

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

在c ++程序中使用电栅栏

我最近一直在尝试使用Electric Fence,我无法弄清楚如何将它与c ++代码一起使用.

这是一个例子:

// test.cpp
#include <cstdlib>                                                                                                                                         

using namespace std;                                                                                                                                       

int main()                                                                                                                                                 
{                                                                                                                                                                                                                                                                                                     
        int *a = new int(10);                                                                                                                              
        delete a;                                                                                                                              
}  
Run Code Online (Sandbox Code Playgroud)

我编译了它

g++ ./test.cpp -o test -lefence -L/home/bor/efence_x86_64/lib -lpthread
Run Code Online (Sandbox Code Playgroud)

而且我在开始时看不到Electric Fence标题,并且在可执行文件中找不到EF符号(使用nm命令).

但是,如果我修改这样的程序:

// test.cpp
#include <cstdlib>                                                                                                                                         

using namespace std;                                                                                                                                       

int main()                                                                                                                                                 
{                                                                                                                                                          
        char *p = (char*)malloc(20);                                                                                                                       
        free(p);                                                                                                                                           
        int *a = new int(10);                                                                                                                              
        delete a;
}
Run Code Online (Sandbox Code Playgroud)

一切都很好 - EF出现了.我知道它解决了这个问题,我知道:).我只是想了解为什么它首先不起作用,因为new()应该打电话malloc(),delete()打电话free(),不是吗?

我参与其中的原因是一个使用boost库和其他几个的大项目.这个程序从不打电话malloc()free()直接打电话.当我使用EF构建它时,我不会将EF链接到最终的可执行文件,但重建了所有试图将EF链接到它们的库.我无法在其中任何一个中找到EF符号.这是正确的方法吗?或者它是错误的,EF最终只能链接到可执行文件,libs应保持不变?但是我再次在可执行文件中找不到EF符号.

c++ linux memory-management memory-fences electric-fence

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

Merkle 树与哈希表

与哈希表相比,使用Merkle 树有什么优点?哈希表是2层结构,Merkle树是log n层结构。两者都可用于验证其中一个节点是否已更改。哈希列表将更快地完成此任务。那么为什么要使用默克尔树呢?

algorithm data-structures hashtree

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

Windows模拟UNIX atoh()函数

在Windows API或MFC中有任何模拟atoh()功能吗?

atoh() 将包含十六进制数字的字符串转换为无符号数字

unsigned x = atoh("A");
Run Code Online (Sandbox Code Playgroud)

操作后x = 10.

在Windows中我有一个CString,包含"A".我怎样才能将它转换为int?

windows mfc

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