【问题标题】:How to handle user input/output in kdbg (testing assembly code)?如何在 kdbg(测试汇编代码)中处理用户输入/输出?
【发布时间】:2018-01-09 09:27:39
【问题描述】:

读取宏:

%macro read 2
  mov rax, 0  
  mov rdi, 0  
  mov rsi, %1 
  mov rdx, %2 i
  syscall
%endmacro

编写宏:

%macro write 2
  mov rax, 1  
  mov rdi, 0  
  mov rsi, %1 
  mov rdx, %2
  syscall
%endmacro

我正在尝试使用 kdbg 测试我的程序,但我不确定如何输入内容,因为 kdbg 甚至没有提示我这样做,并且在我尝试编写时转到输出窗口stdout 的某些内容没有显示,查看我的输出或从stddin 输入内容的正确方法是什么?

【问题讨论】:

  • 对于写入,stdout 是文件描述符 1,而不是 0。使用 strace 查看您实际执行的系统调用。在您担心kdbg 以及它如何设置终端仿真器并将程序的输入/输出连接到它之前,请确保它在调试器之外工作。例如你确定你传递的是一个指向read/write的指针,而不是一个值吗?
  • 根据您的建议,它在终端中运行良好,但不确定如何调试程序
  • 在终端中,FD 0 连接到 TTY,因此它可能可以写入。但如果有管道,写入 FD 0 将无法正常工作。使用strace,使用调试器查看raxsyscall之后的返回值。
  • 另外,当您的程序在kdbg 下运行时,运行(在另一个终端中)ls -l /proc/PID/fd(其中 PID 是您的进程的 pid,而不是 kdbg)。这会让你看到标准输入和标准输出是否连接到伪终端。

标签: linux assembly nasm kdbg


【解决方案1】:

要启用交互式输入,您必须使用外部终端窗口。转到设置->此程序,切换到输出部分,然后启用完整终端仿真。您必须重新加载程序。 (这将是 File->Recent Executables 中最顶部的条目。)

【讨论】:

  • 启用此选项后会发生什么?我将如何为程序提供一些输入?
  • 当您重新加载程序时,会打开一个xterm 窗口,该窗口连接到您程序的stdin、stdout 和stderr。在该窗口中输入您的输入。
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多