我一直在开发一种新语言的编译器.我认为能够在语法感知环境中展示它的开发是很好的.该语言有很多自定义关键字,其结构与Java或C/C++等常用语言有很大不同.
如何为Eclipse开发自定义语法highligher?我已经看到一些插件的引用,但文档不够彻底,不足以满足我的初学者的需求.
我的语言有语法/ RE,以及相关关键字列表.
我想根据用户输入改变字符串中双重表示的精度.现在我正在尝试这样的事情:
String foo = String.format("%.*f\n", precision, my_double);
Run Code Online (Sandbox Code Playgroud)
但我收到了java.util.UnknownFormatConversionException
.我对这种方法的启发是C printf和这个资源(1.3.1节).
我在某处有一个简单的语法错误,Java支持这种情况,还是有更好的方法?
编辑:
我想我可以这样做:
String foo = String.format("%." + precision + "f\n", my_double);
Run Code Online (Sandbox Code Playgroud)
但是我仍然对这种操作的原生支持感兴趣.
我一直在阅读Linux内核(特别是2.6.11).我发现了以下定义:
#define unlikely(x) __builtin_expect(!!(x), 0)
Run Code Online (Sandbox Code Playgroud)
(来自linux-2.6.11/include/linux/compiler.h:61 lxr链接)
什么!! 完成?为什么不使用(x)?
也可以看看:
我是加密证书的新手,我正在试图找出Android应用程序的"./META-INF"文件夹下的"CERT.RSA"文件的组件.
据我了解,"CERT.RSA"用于验证同一目录下"CERT.SF"文件的签名.它应该包括证书元信息(主题,发行者,序列号等),由开发者私钥签名的"CERT.SF"签名,以及用于验证签名的公钥.
如何从"CERT.RSA"文件中获取上述组件?特别是,如何从"CERT.RSA"中检索公钥?
我尝试使用以下命令来显示签名证书.当人们谈论签名证书时,是否(以下输出)公钥或签名签名?
>> openssl pkcs7 -inform DER -print_certs -out cert.pem -in CERT.RSA
>> cat cert.pem
subject=/C=SE/ST=Kista/L=Kista/O=Javsym/OU=Mobile Visuals/CN=Eyvind Almqvist
issuer=/C=SE/ST=Kista/L=Kista/O=Javsym/OU=Mobile Visuals/CN=Eyvind Almqvist
-----BEGIN CERTIFICATE-----
MIICWzCCAcSgAwIBAgIETVPFgjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJT
RTEOMAwGA1UECBMFS2lzdGExDjAMBgNVBAcTBUtpc3RhMQ8wDQYDVQQKEwZKYXZz
eW0xFzAVBgNVBAsTDk1vYmlsZSBWaXN1YWxzMRgwFgYDVQQDEw9FeXZpbmQgQWxt
cXZpc3QwIBcNMTEwMjEwMTEwMTIyWhgPMjA2MTAxMjgxMTAxMjJaMHExCzAJBgNV
BAYTAlNFMQ4wDAYDVQQIEwVLaXN0YTEOMAwGA1UEBxMFS2lzdGExDzANBgNVBAoT
BkphdnN5bTEXMBUGA1UECxMOTW9iaWxlIFZpc3VhbHMxGDAWBgNVBAMTD0V5dmlu
ZCBBbG1xdmlzdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAjwLlwflQ2zoC
1EeCkICSqYTSkdv6Xj0YCqoQsuLJw0pwDbz5qRos61Ub0ZxWCa4TfXu1NJmuD4j+
LwQYvAR6JO985y4zjH1Ee5qZmHDC5yoSRko6P8B4KfmBm8E8CryhUjN7vNLUfG2o
XrmXK+g5KKTx3wzWlb4+AdAS7/NlDVkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAS
CxdfvR/LHPlULkCsoGw9/Q2ZhsTlPr7fZw32sef9vnz1hqd6iMDsLC2c34yRVJfb
t6dZCVO9/gWMURIZ7NmT36uBFAUB+XkGK+5/ot3YEJicEwmk/Nvj1Tzo3PjBX3ZD
lLBpEPgc3IUOhgMyzDR+ytgFlH0MkDps6FApunUpiQ==
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
通过使用以下命令,我可以获得此证书的元信息:
>> keytool -printcert -file CERT.RSA
Owner: CN=Eyvind Almqvist, OU=Mobile Visuals, O=Javsym, L=Kista, ST=Kista, C=SE
Issuer: CN=Eyvind Almqvist, OU=Mobile Visuals, O=Javsym, L=Kista, ST=Kista, C=SE
Serial number: 4d53c582
Valid from: Thu Feb 10 06:01:22 EST 2011 until: Fri Jan 28 06:01:22 …
Run Code Online (Sandbox Code Playgroud) android digital-certificate digital-signature android-applicationinfo
在其他地方的回复中,我找到了以下代码段:
一般来说,让C调用者分配内存而不是被调用者更好 - 因此在我看来strcpy是一个"更好"的函数,而不是strdup.
我可以看到这是一个有效的模式,但为什么它可以被认为更好?遵循这种模式是否有优势?或不?
最近我写了大量的代码,看起来像:
struct foo *a = foo_create();
// do something with a
foo_destroy(a);
Run Code Online (Sandbox Code Playgroud)
如果foo
它不是一个扁平结构,那么我想我可以将所有初始化放在一个步骤中.另外,假设结构应该在堆上.为什么这样做会更好:
struct foo *a = malloc(sizeof(foo));
foo_init(a);
// do something with a
foo_destroy(a)
Run Code Online (Sandbox Code Playgroud) 我正在进行内核工作以进行一些夏季研究.我们希望在特定的RTT计算中对TCP进行修改.我想要做的是将tcp_input.c中某个函数的分辨率替换为动态加载的内核模块提供的函数.我认为这将提高我们开发和分发修改的速度.
我感兴趣的函数被声明为static,但我已经使用非静态函数重新编译内核并由EXPORT_SYMBOL导出.这意味着该功能现在可供内核的其他模块/部分访问.我通过"cat/proc/kallsyms"验证了这一点.
现在我希望能够加载一个可以重写符号地址的模块,从初始到动态加载的函数.同样,当要卸载模块时,它将恢复原始地址.这是一种可行的方法吗?你们都有建议如何更好地实施这项建议吗?
谢谢!
编辑:
这是我的最终方法.
给定以下函数(我想要覆盖,并且不导出):
static void internal_function(void)
{
// do something interesting
return;
}
Run Code Online (Sandbox Code Playgroud)
像这样修改:
static void internal_function_original(void)
{
// do something interesting
return;
}
static void (*internal_function)(void) = &internal_function_original;
EXPORT_SYMBOL(internal_function);
Run Code Online (Sandbox Code Playgroud)
这将重新定义了预期的函数标识符,而不是指向原始实现的函数指针(可以以类似的方式调用).EXPORT_SYMBOL()使地址可以全局访问,因此我们可以从模块(或其他内核位置)修改它.
现在您可以使用以下格式编写内核模块:
static void (*original_function_reference)(void);
extern void (*internal_function)(void);
static void new_function_implementation(void)
{
// do something new and interesting
// return
}
int init_module(void)
{
original_function_reference = internal_function;
internal_function = &new_function_implementation;
return 0;
}
void cleanup_module(void)
{
internal_function = original_function_reference;
}
Run Code Online (Sandbox Code Playgroud)
此模块使用动态加载的版本替换原始实现.卸载后,将恢复原始引用(和实现).在我的具体案例中,我为TCP中的RTT提供了一个新的估算器.通过使用模块,我可以进行小的调整并重新开始测试,所有这些都无需重新编译和重新启动内核.
如何检查类型是否是Python中类型的子类型?我不是指类型的实例,而是比较类型实例本身.例如:
class A(object):
...
class B(A):
...
class C(object)
...
# Check that instance is a subclass instance:
isinstance(A(), A) --> True
isinstance(B(), A) --> True
isinstance(C(), A) --> False
# What about comparing the types directly?
SOME_FUNCTION(A, A) --> True
SOME_FUNCTION(B, A) --> True
SOME_FUNCTION(C, A) --> False
Run Code Online (Sandbox Code Playgroud) 是否有用于解析Windows注册表文件(NTUSER.DAT)的纯Python(即完全跨平台)库?只读访问是可以接受的.
如果没有,那么存在哪些资源记录了Registry文件的反向工程结构?
谢谢!
更新 因为当问这个问题时似乎不存在纯Python解决方案,所以我继续写了一个.python-registry向Windows注册表文件公开了Pythonic,只读接口.
我想合并SQLite数据库,有些可能在内存中.我通过将数据库路径指定为来创建内存数据库:memory:
.在这篇文章之后,使用attach
SQLite 的功能似乎是一种简单而有效的方法.但是如何指定我的内存数据库作为附加源?
例如,我想做类似的事情:
c1 = sqlite3.connect(":memory:")
c1.execute(...create table, insert a bunch, commit...)
c2 = sqlite3.connect(":memory:")
c2.execute("""
ATTACH ? AS ToMerge;
BEGIN;
INSERT INTO Records SELECT * FROM ToMerge.Records;
COMMIT;
""", (c1.get_attach_id(), ))
Run Code Online (Sandbox Code Playgroud)
但是,当然,这c1.get_attach_id()
是我为演示目的而制作的一种方法,因为使用字符串:memory:
会很模糊.如何指定现有c1
数据库?
在阅读其他Python模块,我已经看到了很多人常常包括__version__
和__author__
他们的源文件的全局变量(它甚至在提到PEP3001).我想用一组合理的变量来记录我的代码.什么是可能通常包含的全局变量列表?