如果我理解正确,.bss
ELF文件中的部分用于为零初始化变量分配空间.我们的工具链生成ELF文件,因此我的问题是:该.bss
部分实际上是否必须包含所有这些零?这似乎是一种非常浪费的空间,比如说,当我分配一个全局的10兆字节数组时,它会在ELF文件中产生10兆字节的零.我在这看错了什么?
我有以下链接器脚本:
SECTIONS {
.arora_exec_free_space 4399531 :
{
*(.text)
*(.rodata)
*(.data.rel.ro.local)
}
.arora_data_free_space (ADDR(.arora_exec_free_space) + SIZEOF(.arora_exec_free_space)) : AT (7592352)
{
*(.data)
*(.bss)
*(.got)
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译我的程序时,两个部分(exec和数据)处于不同的LOAD段.我想将两个部分(.arora_data_free_space和.arora_exec_free_space)放入一个LOAD段.有没有办法使用链接描述文件?我该怎么做?谢谢.
我正在阅读有关部分和细分的内容.似乎您可以列出部分和段之间的映射,如下所示.
$ readelf -l test
Elf file type is EXEC (Executable file)
Entry point 0x8048330
There are 9 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000034 0x08048034 0x08048034 0x00120 0x00120 R E 0x4
INTERP 0x000154 0x08048154 0x08048154 0x00013 0x00013 R 0x1
[Requesting program interpreter: /lib/ld-linux.so.2]
LOAD 0x000000 0x08048000 0x08048000 0x0065c 0x0065c R E 0x1000
LOAD 0x000f14 0x08049f14 0x08049f14 0x00104 0x00110 RW 0x1000
DYNAMIC 0x000f28 0x08049f28 0x08049f28 0x000c8 0x000c8 RW 0x4 …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个python内置函数(或机制)来将列表分段为所需的段长度(不改变输入列表).这是我已有的代码:
>>> def split_list(list, seg_length):
... inlist = list[:]
... outlist = []
...
... while inlist:
... outlist.append(inlist[0:seg_length])
... inlist[0:seg_length] = []
...
... return outlist
...
>>> alist = range(10)
>>> split_list(alist, 3)
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
Run Code Online (Sandbox Code Playgroud) 我有一组由两点定义的段.鉴于一点,我怎样才能发现最接近这一点的细分?
我已经编写了一个计算点和段之间距离的算法.无论如何计算每个段的这种距离,然后选择具有最低距离的段是不是真的有效:(
由于段代表街道,这实际上是一个反向地理编码问题所以我希望有这个问题的众所周知的解决方案......
非常感谢!
我注意到在程序段中使用了代码段.
例:
MOV DWORD PTR SS:[EBP-30],30
Run Code Online (Sandbox Code Playgroud)
我认为"PTR SS:"用于指定EBP-30来自堆栈?(SS:堆栈段)我是对还是我完全错了?:)那么,请你告诉我上面的例子与之间的区别
MOV DWORD PTR[EBP-30],30
Run Code Online (Sandbox Code Playgroud)
那么在操作码中使用的DS(数据段)呢?
我最近在计算几何上做了一些工作,我试图找到一种检查两个线段是否相交的方法.我认为我可以使用逆时针方向(简称CCW)来确定.到目前为止,这是我的代码:
struct point { double x, y };
double CCW(point a, point b, point c)
{ return (b.x-a.x)*(c.y-a.y) - (b.y-a.y)*(c.x-a.x); }
int intersect(point a, point b, point c, point d)
{ return (CCW(a,b,c)*CCW(a,b,d)<0 && CCW(c,d,b)*CCW(c,d,a)<0); }
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于我输入的测试用例,它非常易读且易于实现.但在网上搜索后,我发现了另一种解决分段交叉问题的方法.代码与我的类似,但它有一些if
我的实现省略的语句.这是代码:
struct line { point s, e; };
int middle(int a, int b, int c) {
int t;
if ( a > b ) {
t = a;
a = b;
b = t;
}
if ( a <= c && c …
Run Code Online (Sandbox Code Playgroud) 使用LODSB将相对地址加载到我的代码中的字符串所需的最少步骤是什么?
我有以下使用PXE引导的测试程序。我通过两种方式引导它:通过pxelinux.0和直接引导。如果我直接启动它,我的程序将打印两个字符串。如果我通过pxelinux.0引导,它将仅输出第一个字符串。
为什么?
答: 代码很好,初始地址数学错误。见下文。
工作技巧(两者):
cld
ds
于cs
si
si
非工作技术(仅适用于pxelinux):
(((cs << 4) + offset) >> 4)
ds
为那个。(A000或07C0)// Note: If you try this code, don't forget to set
// the "#if 0" below appropriately!
.text
.globl start, _start
start:
_start:
_start1:
.code16
jmp real_start
. = _start1 + 0x1fe
.byte 0x55, 0xAA
// Next sector
. = _start1 + 0x200
jmp real_start
test1_str:
.asciz "\r\nTest: 9020:fe00"
test2_str:
.asciz …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 ffmpeg 为视频添加水印。
但是有一个要求让我很难理解如何制作它,我在课程网络上进行了搜索。
所以,我需要水印每 20 秒随机改变 4 个角的位置。
我的想法是将视频拆分为一组文件,将水印随机应用于每个文件并将结果合并到一个输出文件中。但我认为这是不好的方式。
有人可以帮我吗?
谢谢,谢尔盖
我们给出了两组间隔A
和B
.按间隔,我的意思是一对有序的整数,如c(2,5)
.我想找到所有间隔对 - 一个来自A
和一个B
- 有重叠.
例如,如果A和B如下:
A=c(c(1,7), c(2,5), c(4, 16))
B=c(c(2,3), c(2,20))
Run Code Online (Sandbox Code Playgroud)
然后FindOverlap(A, B)
应返回如下的矩阵(唯一的零元素是因为第3个间隔A
与第一个间隔不重叠B
):
1 1
1 1
0 1
Run Code Online (Sandbox Code Playgroud)
你有什么有效的想法吗?