如何获得“回溯” (如 gdb)仅使用 ptrace(linux、x86/x86_64)
我想像 gdb 那样获得类似 backtrace 的输出。但我想直接通过 ptrace() 来完成此操作。我的平台是Linux,x86;以及后来的 x86_64。 现在我只想从堆栈中…
Go编程linux amd64错误释放对象
我想尝试一下 Google 的 go 语言。 我已经按照文档所说正确安装了所有内容。 但是当我尝试编译时,我总是有类似的输出: $ 6g main.go main.go:3: imp…
如果没有 CMP,JE 指令如何工作?
.L10: leal (%rsi,%rsi,4), %edx movsbl %al,%eax addq $1, %rdi leal -48(%rax,%rdx,2), %esi je .L3 上面的 je 前面没有 cmp。这里是如何运作的?…
如何在汇编中将 RAX 中的值写入 STDOUT?
我可以使用 syscall 进行 write 将内存中的一些数据打印到 STDOUT: ssize_t write(int fd, const void *buf, size_t count); 也就是说: movq $1, %r…
x86_64“gcc -S” ->作为-> ld->执行失败
我正在尝试通过“gcc -S”编译一个简化的C源文件-> “作为”-> x86_64 平台上的“ld”。 该过程完成时没有错误,但在执行时,显示“No such file or d…
32位Windows下使用Amd64指令的轻量级方法?
对于一些使用 64 位变量的 CPU 密集型代码,使用 Amd64 指令集比使用 x86 指令集更有利。在32位Windows(例如Windows XP SP3)下如何实现?当然,我假…
GCC 内联汇编中的 C 数组?
我正在尝试在 C/x86_64 内联汇编中编写一个函数,但我运气不佳。 我们可以将其归结为:( void f(const unsigned char *a, unsigned char *b, const u…
以 amd64 模式编译(Visual Studio 2010)
伙计们,我想编译一个本机 64 位应用程序。我确实以正确的方式配置了 VS 并且它可以工作,但显然它是交叉编译而不是在本机 amd64 模式下编译,因为如…
学习汇编-echo程序名
我正在尝试用汇编语言编写一个简单的程序来写出程序的名称。使用 gdb 进行调试,我确定对 sys_write 的调用返回 -14 (EFAULT)。我还能够验证我的 strl…
x86 操作码编码中的方向/符号扩展位
在 x86 指令集中,操作码索引 1 处的位可以是指定目标操作数和源操作数的方向位,也可以是符号扩展位。 例如 add 00 /r ADD r/m8 , r8 与 02 /r ADD r…
GAS:jmp 到标签会导致错误的跳转?
我正在尝试汇编以下程序: .text .globl _search2 _search2: pushq %rbp movq %rsp, %rbp movq %rax, -8(%rbp) go_again: cmpl $0x90909090, (%rax) j…
CLI/C++ DLL 包装非托管 DLL,在 .NET 中运行时崩溃(ieshims.dll 和 gpsvc.dll 丢失)
我继承了一个未修改的 DLL(最初由 C 代码构建)并希望在 .NET 项目中使用它。我有将 DLL 的功能包装在 C++ 类型对象中的头文件,我想要公开的正是这…
如何保存 x86_64 上的寄存器用于中断服务程序?
我正在查看学校项目中的一些旧代码,在尝试在笔记本电脑上编译它时遇到了一些问题。它最初是为旧的 32 位版本的 gcc 编写的。不管怎样,我试图将一些…
int32 len = va_args(va, int32) 在 x86_64 GNU/Linux 上给出非常大的值
void AppBuf(message_id_type msgID, int32 numPairs, va_list va) { int32 len = va_args(va, int32); .... } 上面的代码在 Windows(32 和 64 位)…
C 如何返回结构体?
(gdb) disas func Dump of assembler code for function func: 0x00000000004004b8 : push %rbp 0x00000000004004b9 : mov %rsp,%rbp 0x0000000000400…