使用“ strace”轨道`````''''系统呼叫

发布于 2025-02-10 13:07:24 字数 2005 浏览 0 评论 0原文

我想清除终端,我找到了两种解决方案:

  1. 我如何清理屏幕而不必填写屏幕
  2. linux NASM组件在终端中的清除屏幕

我实现了2解决方案,它起作用。顺便说一句,什么是语法。 - 名称的clear,我在

.section .data

clear:
    .string "\033[H\033[2J"

.equ CLEAR_LEN,  . - clear
    

.section .text

.globl _start

_start:
    movq $1, %rax
    movq $1, %rdi
    movq $clear, %rsi
    movq $CLEAR_LEN, %rdx 
    syscall

    movq $60, %rax
    syscall

对于1解决方案,我有疑问。我使用Xshell连接远程Linux,而不是使用msdos,因此窗口的大小可以更换。如果我们想知道大小似乎很困难。因此,我认为该解决方案是不可行的。

此外,我认为我们在c中使用system(“ clear”),因此它可能在汇编中起作用,然后我使用strace跟踪在C代码下方。

#include <stdlib.h>

int main(void) {
    system("clear");

    return 0;
}

我找到了一些奇怪的系统调用。它清晰终端吗?

rt_sigaction(SIGINT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fadf89dc0c0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fadf89dc0c0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0

...

rt_sigprocmask(SIG_BLOCK, ~[], [CHLD], 8) = 0

...

rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fadf89dc0c0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fadf89dc0c0}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=640502, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---

I want to clear terminal, and I found two solutions:

  1. How can I clear the screen without having to fill it
  2. linux nasm assembly clear screen in terminal

I implemented 2 solution, it works. And BTW, What is the syntax . - clear of name, I can't found in using as.

.section .data

clear:
    .string "\033[H\033[2J"

.equ CLEAR_LEN,  . - clear
    

.section .text

.globl _start

_start:
    movq $1, %rax
    movq $1, %rdi
    movq $clear, %rsi
    movq $CLEAR_LEN, %rdx 
    syscall

    movq $60, %rax
    syscall

For 1 solution, I have a doubt. I use Xshell connect remote linux, rather than use MSDOS, so the size of window can changable. If we wanna know the size seems difficult. So I think this solution is unworkable.

In addition, I think we use system("clear") in C, so it probably works in assembly, and then I use strace track below c code.

#include <stdlib.h>

int main(void) {
    system("clear");

    return 0;
}

And I found some strange system calls. Is it clear terminal?

rt_sigaction(SIGINT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fadf89dc0c0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fadf89dc0c0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0

...

rt_sigprocmask(SIG_BLOCK, ~[], [CHLD], 8) = 0

...

rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fadf89dc0c0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fadf89dc0c0}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=640502, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文