我需要在我的C程序中使用简单的ELF文件.我不能使用任何外部库,但我可以使用elf.h.
让我们把hello.o文件作为源代码:
int Hello() { return 3; }
Run Code Online (Sandbox Code Playgroud)
我怎样才能访问Hello只有hello.o文件的ohter C程序?
我应该把它加载到内存中使用mmap或者像这样.最后我需要使用更复杂的ELF文件,但我现在不知道,如何开始.
更新:我需要按照我描述的方式执行此操作,因为它是出于学习目的.整个问题比我描述的更复杂.
对于这个问题假设我需要编写方法:
int HelloFromElfO(const char* helloFile);
Run Code Online (Sandbox Code Playgroud)
这将执行Hello在中实现的功能helloFile.
我不想要完整的答案.我不需要任何代码.我需要一些东西开始.
我有关于ELF文件结构的基本知识,但我不知道如何在没有任何解析器的情况下使用二进制文件在C中工作或者像这样.
UPDATE2:好的,像readelf这样的应用程序非常复杂.所以也许我尝试这种方式:再说一遍,我已经hello.o映射到内存了ptr.如何获得指向Hello函数的指针?
如何从中获取任何结构化数据hello.o?我的意思是,不是纯字节,而是我可以使用的东西.
我需要动态分配内存的某些部分,每个部分都有一些保护 - RW 或 RX。
我试图通过 分配内存malloc,但mprotect总是返回-1 Invalid argument。
我的示例代码:
void *x = malloc(getpagesize());
mprotect(x, getpagesize(), PROT_READ); // returns -1, it;s sample, so only R, not RW or RX
Run Code Online (Sandbox Code Playgroud) 我正在将一个列表转换为另一个列表.除了第一个列表中的数据,我想要添加位置.为此,我创建了以下代码:
class A
{
...
}
class B
{
...
public int Position { get; set; }
}
List<A> listA = ...;
int pos = 1;
List<B> listB = listA.Where(...).Take(...).Select(
a => new B { ..., Position = pos++ }).ToList();
Run Code Online (Sandbox Code Playgroud)
它有效,但它应该并且它会一直有效吗?pos在我的代码中使用这样的变量并在LINQ中更改其值是否安全Select?
我花了很多时间来追踪我的错误,但我找不到任何人可以找出错误的位置?
Environment:
Request Method: GET
Request URL: [http://127.0.0.1:8000/blog/archives]
Django Version: 1.4.1
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'taggit',
'blog')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
89. response = middleware_method(request)
File "/usr/local/lib/python2.7/dist-packages/django/middleware/common.py" in process_request
67. if (not urlresolvers.is_valid_path(request.path_info, urlconf) and
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in is_valid_path
531. resolve(path, urlconf)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve
420. return get_resolver(urlconf).resolve(path)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve
300. sub_match = pattern.resolve(new_path)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve
300. sub_match = …Run Code Online (Sandbox Code Playgroud)