我有一个二进制文件 - Windows静态库(*.lib).
有没有一种简单的方法可以从该库中找出函数及其接口的名称?
类似于emfar和elfdump实用程序(在Linux系统上)?
我是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手册页吗?
我有一个我无法解决的奇怪问题.请帮忙!
该程序是一个在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) 我正在为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()中按下的所有键.但我需要将自己的信息插入键盘消息流中.这有两个问题:
OnReadCompletion()仅在按下某个键时调用.理想情况下,我想以某种方式在没有按下时调用它.我能以某种方式这样做吗?我需要触发键盘中断吗?我尝试使用WRITE_PORT_UCHAR()将命令写入键盘端口(0x60和0x64)但是没有用完.
我试图在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++程序.当客户端遇到问题时,他会向我发送一个日志文件.很高兴看到二进制文件在日志中的确切构建时间.所以,目前我使用这种简单但非常无效的方法:
...
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中构建我的应用程序).
我最近一直在尝试使用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符号.
在Windows API或MFC中有任何模拟atoh()功能吗?
atoh() 将包含十六进制数字的字符串转换为无符号数字
unsigned x = atoh("A");
Run Code Online (Sandbox Code Playgroud)
操作后x = 10.
在Windows中我有一个CString,包含"A".我怎样才能将它转换为int?