low-level 相关问题

就计算机系统而言,低级别是指在系统层堆栈中显得较低的组件。

我可以从内存地址构建环境对象吗?

我发现我们可以从一个内存地址构建/重建一个外部指针,看这个例子,我从一个数据表对象中获取一个指针并重建它: # devtools::install_github("ra...

回答 1 投票 0

如何在 python 中获取 PEB(进程环境块)

我正在尝试使用 python 访问 LDR。要找到 LDR 的地址,我需要 PEB。 我怎么会得到那个? 我试过的是: RtlGetCurrentPeb 使用 ctypes NtQuerySystemInformation 使用 ctypes

回答 0 投票 0

尝试执行用 mmap 映射的 ELF64 时出现 SEGFAULT

我有以下代码: #包括 #包括 #包括 #包括 #包括 #包括 #包括 我有以下代码: #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/stat.h> #include <elf.h> #include <string.h> #include <unistd.h> int main(void) { int fd = open("a.out", O_RDONLY); struct stat file_info; if(fstat(fd, &file_info) < 0) { perror("fstat"); exit(EXIT_FAILURE); } void *mem = mmap(NULL, file_info.st_size, PROT_READ | PROT_EXEC, MAP_PRIVATE, fd, 0); Elf64_Ehdr *elf_header = (Elf64_Ehdr *)mem; if (elf_header->e_ident[EI_MAG0] != ELFMAG0 || elf_header->e_ident[EI_MAG1] != ELFMAG1 || elf_header->e_ident[EI_MAG2] != ELFMAG2 || elf_header->e_ident[EI_MAG3] != ELFMAG3) { fprintf(stderr, "Invalid ELF file\n"); exit(EXIT_FAILURE); } Elf64_Shdr* section_header_table = (Elf64_Shdr*)((char*)mem + elf_header->e_shoff); Elf64_Shdr* section_header_string_table = &section_header_table[elf_header->e_shstrndx]; char* section_header_string_table_mem = (char*)mem + section_header_string_table->sh_offset; Elf64_Shdr* text_section_header = NULL; int i = 0; while (i < elf_header->e_shnum) { char* section_name = section_header_string_table_mem + section_header_table[i].sh_name; if (strcmp(section_name, ".text") == 0) { text_section_header = &section_header_table[i]; break; } i++; } if (text_section_header == NULL) { fprintf(stderr, ".text section not found\n"); exit(EXIT_FAILURE); } void* text_section_mem = (void*)((char*)mem + text_section_header->sh_offset); int (*text_section)(void) = (int (*)(void))text_section_mem; int result = text_section(); printf("Result: %d\n", result); munmap(mem, file_info.st_size); close(fd); } 当我尝试在最后执行函数时程序出现段错误: int result = text_section(); 我检查了指向 .text 部分的指针是否有效,并做了一个 objdump 来检查字节是否相同。 如果有帮助,我尝试运行的 ELF 的源代码是这样的: #include <stdio.h> int g_num = 6969; int main(void) { printf("%d\n", g_num); } 两个程序都已编译: gcc -Wall -Wextra -Werror 你正试图调用一个指向 .text 部分的指针,并期望它执行一个 printf,但你得到了一个分段错误,因为你真正调用的是一个入口点函数,_start,它在在这种情况下,我们可以通过运行 objdump -D a.out 来验证这一点: section .text : 0000000000001040 <_start>: 1040: f3 0f 1e fa endbr64 1044: 31 ed xor %ebp,%ebp 1046: 49 89 d1 mov %rdx,%r9 1049: 5e pop %rsi 104a: 48 89 e2 mov %rsp,%rdx 104d: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp 1051: 50 push %rax 1052: 54 push %rsp [...] 0000000000001129 <main>: 1129: f3 0f 1e fa endbr64 112d: 55 push %rbp 112e: 48 89 e5 mov %rsp,%rbp 1131: b8 00 00 00 00 mov $0x0,%eax 1136: 5d pop %rbp 1137: c3 ret 调用main(),我建议你只使用他的偏移量,这里main()位于偏移量+0x1129: int (*main_offset)(void) = (int (*)(void))((char *)mem + 0x1129); int result = main_offset();

回答 1 投票 0

Python:类状态中的可变变量,幕后发生了什么?

我目前正在使用 Python 进行面向对象编程的在线课程,其中一项技能测试是编写密码生成器类。您将在下方找到推荐的答案。 重新进口 随机导入 来自字符串

回答 3 投票 0

将任何文件转换为二进制 1 和 0,然后在 python 中无损坏地返回原始文件

我在这里需要一点帮助,不要问我为什么这是一个疯狂的想法,但我想将任何文件转换为纯二进制代码 1 和 0,然后再转换回原始文件。要求是当转换

回答 1 投票 0

分段错误,虽然内存是 malloc'd [重复]

uint32_t *cc=malloc( 262144*(sizeof(uint32_t)) ); 如果(cc==0) printf("没有内存"); 诠释 c; 对于(c=0;c<262144;c++) */ cc[c]=0; ``` Program received signal SIGSEGV,

回答 0 投票 0

如何将MSIL或CIL编写并编译成可执行文件?

我目前正在学习一点MSILCIL代码,我想编译一个用MSIL编写的基本的Hello World。然而我遇到了一些麻烦。一开始我看了这篇文章。然后我把代码放在 ...

回答 1 投票 0

这样分配内存是否有区别?

我认为我有一个初学者的疑问。我不知道这是否是一个非常愚蠢的问题,但这两种情况之间没有任何区别:通用结构:typedef struct {void * data; }对象; 1st ...

回答 1 投票 0

CPU如何执行类似MUL / MULT的指令?

在不同的汇编语言中,MUL(x86)/ MULT(mips)指的是乘法。对于程序员来说,这是一个黑匣子。我对实际上CPU如何完成乘法感兴趣,而与...

回答 2 投票 9

Windows进程的内存映射如何?

这可能是重复的问题。我想知道Windows进程的内存映射如何?我正在寻找细节。请提供指向博客,文章和其他相关文献的链接。

回答 1 投票 14

C中的类型转换是怎么回事?

我知道C语言中的类型转换在做什么。我知道有时这是隐式完成的,有时又需要显式地完成。但是我不知道这在低位如何发生...

回答 1 投票 5

在使用NUMA体系结构时将回送用于同步IPC

(对于Linux平台)(从性能的角度来看)尝试通过不同NUMA节点上的进程之间的回送接口进行通信(以同步方式)是否可行?如果...

回答 1 投票 0

为什么将字符串文字视为JavaScript中的原始类型?

官方文档以及互联网上的大量文章都说'some string'是原始值,这意味着每次我们将其分配给变量时,它都会创建副本。但是,此...

回答 1 投票 4


仅使用1和0时'1 + 1'的外观如何?

有可能吗?可以仅使用1和0(是/否,开/关...)完成此操作吗?如果是这样,这段代码看起来如何?如果这个例子太复杂,我可以接受所有其他种类的例子,但是......>

回答 1 投票 -1

lua脚本如何调用尚未导入的函数?

要清楚,这不是X怎么办? ,我很困惑X无法正常工作。哇,我在做X,我不明白为什么做X会产生问题。我对脚本非常了解...

回答 1 投票 0

我应该学习汇编语言还是C,以了解“真实编程”的工作原理?

我是一个主要使用Ruby和C#进行工作的Web开发人员。我想学习一种低级语言,所以我看起来不像我(计算机科学专家)老板的蠢蠢欲动。我听过很多关于...

回答 11 投票 2

如何在MIPS中迭代数字?

我有一个需要输入数字的任务,例如13002,并使用UART(包括非前导0)逐位打印。 UART希望将其打印的内容放入$ s0寄存器中,但我...

回答 1 投票 0

CPU寄存器的内容多久更改一次?

CPU寄存器保存的数据是否经常更改? Wikipedia文章将寄存器描述为“快速访问的位置...少量快速存储”。我假设内存是...

回答 2 投票 0

C中**(&variable)的含义是什么?

我目前正在学习C的语法和语义。因此,我知道定义变量看起来像是int x = 4;并且指向x 的指针将是int p = * x;。所以我的问题是:什么是...

回答 2 投票 -2

© www.soinside.com 2019 - 2024. All rights reserved.