小编sta*_*lit的帖子

python - 在 super().__init__() 中访问超类的类属性

我有一个Parent具有许多实例属性的类,并且我总是传递 adict来初始化实例。像这样:

info = {
    "name" : "Bob",
    "col" : 5,
    "line" : 10,
    "type" : "Alien"
}

p = Parent(info)
Run Code Online (Sandbox Code Playgroud)

__init__方法中,我不想this.property_name = value为每个属性编写,因为代码会很长。例如:

class Parent(object):

    def __init__(self, kwargs):
        this.name = kwargs.get("name")
        this.col = kwargs.get("col")
        this.line = kwargs.get("line")
        this.type = kwargs.get("type")
Run Code Online (Sandbox Code Playgroud)

所以我想使用一个函数来迭代dict来设置这些实例属性。这是我写的函数:

def initialize_properties(instance, names, kwargs):
    for name in names:
        setattr(instance, name, kwargs.get(name))
Run Code Online (Sandbox Code Playgroud)

看来我需要将属性名称列表存储names在某处,并且我决定将其存储为类属性,因为我希望我的类对人类友好(当有人读取类定义时,他知道该类具有哪些实例属性)。所以我改变了我的类定义如下:

class Parent(object):
    props = ("name", "col", "line", "type")

    def __init__(self, kwargs):
        initialize_properties(self, …
Run Code Online (Sandbox Code Playgroud)

python inheritance class

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

ELF程序头虚拟地址和文件偏移量

我知道两者之间的关系:

虚拟地址mod页面对齐==文件偏移mod页面对齐

但有人能告诉我这两个数字的计算方向是什么?

是否根据上述关系从文件偏移量计算虚拟地址,反之亦然?

更新

下面是一些更详细的信息:当链接器写入ELF文件头时,它设置程序头的虚拟地址和文件偏移量.(段)

例如,有以下输出readelf -l someELFfile:

Elf file type is EXEC (Executable file)
Entry point 0x8048094
Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000000 0x08048000 0x08048000 0x00154 0x00154 R E 0x1000
  LOAD           0x000154 0x08049154 0x08049154 0x00004 0x00004 RW  0x1000
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x10
Run Code Online (Sandbox Code Playgroud)

我们可以看到2个LOAD段.

第一个LOAD的虚拟地址以0x8048154结束,而第二个LOAD从0x8049154开始.

在ELF文件中,第二个LOAD紧跟在第一个LOAD后面,文件偏移量为0x00154,但是当这个ELF加载到内存中时,它在第一个LOAD段结束后的0x1000字节处开始.

但为什么?如果我们必须考虑内存页面对齐,为什么第二个LOAD段不是从0x80489000开始?为什么它在第一个LOAD段结束后的0x1000字节处开始?

我知道第二个LOAD的虚拟地址满足关系:

虚拟地址mod页面对齐==文件偏移mod页面对齐

但我不知道为什么必须满足这种关系.

linux binary gcc elf

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

标签 统计

binary ×1

class ×1

elf ×1

gcc ×1

inheritance ×1

linux ×1

python ×1