首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux程序是怎样执行

/a.out 在shell终端上运行可执行程序的标准流程: 启动终端仿真器应用程序 输入可执行文件所在的相对路径或者绝对路径 如果该可执行程序需要输入参数的话,还需要输入参数 比如,我们在终端上输入...ps 在此处,我们可以人为ls为可执行程序的名称,--version 是该程序需要的参数。...可执行文件所需的参数 可执行文件所在的环境变量 在该函数中,最终就是运行可执行程序,这一步操作,是在kernel中操作的。...如果二进制处理程序支持给定的可执行文件格式,它将开始准备可执行二进制文件的前期工作。...elf_phdata) goto out; 程序解释器指定在可执行文件的.interp部分(在大多数情况下,对于x86_64,链接器为– /lib64/ld-linux-x86-64.so.2)

4.9K50

Go:执行跟踪变得更加强大

简介 Go 语言的 runtime/trace 包含一个强大的工具,用于理解和排查 Go 程序。其中的功能允许跟踪每个 goroutine 在一段时间内的执行情况。...例如,在 CPU 概要文件中很难看到并发瓶颈,因为没有要采样的执行。但在执行跟踪中,缺乏执行将以惊人的清晰度显示出来,并且被阻塞的 goroutine 的堆栈跟踪将迅速指向罪魁祸首。...Go 开发人员甚至可以为自己的程序添加任务、区域和日志,以便将他们更高层次的关注点与更低层次的执行细节相关联。 问题 不幸的是,执行跟踪中的大量信息通常无法获取。...新的工具,可将跟踪数据与程序的源代码相关联。 结果 这些改进使 Go 执行跟踪成为一种更强大、更易于使用的工具。它们使 Go 开发人员能够更轻松地理解和排查其程序中的并发问题。...trace.Stop() } 然后,可以使用 go tool trace 命令可视化跟踪: go tool trace main.trace 结论 Go 执行跟踪是理解和排查 Go 程序中并发问题的强大工具

200
您找到你想要的搜索结果了吗?
是的
没有找到

goland编译golang生成linux执行程序

所以我们常用的goland编译配置的,都是Windows环境,生成也的EXE执行程序 但我们很多部署服务器都是linux,所以要部署的时候,需要生成linux环境下的执行程序 网上有说,修改配置后再编译...,如: set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 但,生成完,需要把配置改回来后,才能再用。...且如果你的环境配置有特殊化, 如工具的本地项目Path,这时,直接用go build 命令是编译不了的 后面终于让我找到一个goland的配置生成linux执行程序的方法。...其实也很简单,只要复制一份Windows下的编译配置,再补上一些参数即可 1、 去掉 Run after build  2、在Environment 上写入参数: GOARCH=amd64;GOOS=linux

3K30

Linux程序是如何被执行

程序的文件路径拷贝到堆栈中。 8. 将环境变量拷贝到堆栈中。 9. 将程序参数拷贝到堆栈中。 10. 调用exec_binprm方法继续执行程序。...return retval; } EXPORT_SYMBOL(search_binary_handler); 该方法遍历linux中可识别的可执行文件格式,找到对应的文件格式,并调用其load_binary...linux下可执行文件的格式一般为elf,所以我们直接看其load_binary方法: // fs/binfmt_elf.c static int load_elf_binary(struct linux_binprm...elf_entry指向的代码 // 如果该程序有interpreter,则是执行interpreter中的入口地址 // 如果没有,则是执行程序自己的入口地址...好了,到这里,整个程序的内核部分的执行流程就讲完了,结合本文开始提到的那篇文章 Linux下c语言中的main函数是如何被调用的,有关linux程序执行就全部讲清楚了。

3.1K20

GDB 调试 QEMU 源码跟踪 QMP 协议执行

接上文,通过跟踪 libvirt 的源码,找到 virsh domblkinfo 最终是使用 QMP 协议从 QEMU 获取到关键字为 query-block 的数据,其中带有 wr_highest_offset.../configure --enable-debug 跟踪前需要定位到 QEMU 中填充该字段的函数,首先在源码中全局搜索 wr_highest_offset ,最终确定 block/qapi.c 文件中的...bdrv_query_bds_stats 函数最有可能是填充该字段的位置,下面就来跟踪这个函数的走向吧。...因此跟踪该虚拟机所在进程即可。 # ps -aux | grep qemu qemu 2185346 0.6 0.5 3562240 333440 ?...: gdb qemu-system-aarch64 2185346 在之前找到的目标函数处打上断点: (gdb) b bdrv_query_bds_stats 之后 c 继续执行,尝试查询一下磁盘状态。

23040

使用strace跟踪多进程程序

简介 strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 2. 常用参数 -p 跟踪指定的进程 -o filename 默认strace将结果输出到stdout。...跟踪多进程的实例 要跟踪的Taskdemo.php代码如下(即之前使用swoole实现的生产者消费者模型)。 <?php require('....执行如下命令,开始跟踪 strace -ff -o task php Taskdemo.php 执行后我们得到三个文件 task.28203 task.28204 task.28205 熟悉代码的同学应该可以猜到...另一个十分有用的功能参数-c 统计每种系统调用所执行的时间,调用次数,出错次数。 strace -c php Taskdemo.php 我们执行上面的命令,看下主进程进行的系统调用。...- seconds:执行总时间 - usecs/call:单个命令执行时间 - calls:调用次数 - errors: 出错次数 - syscall: 系统调用 说明: -

2.5K10

Linux命令:traceroute命令(路由跟踪

traceroute的原理是试图以最小的TTL(存活时间)发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网关ICMP的应答。发送数据包的大小默认为38个字节。...原理:程序利用增加存活时间(TTL)来实现其功能。每当数据包(3个数据包包括源地址,目的地址和包发出的时间标签)经过一个路由器,其存活时间就会减1。...-v 详细显示指令的执行过程。 -w 设置等待远端主机回报的时间。 -x 开启或关闭数据包的正确性检验。...在Linux下,traceroute程序发送一个UDP数据报给目的主机,但是它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口,因此该数据报到达目的主机时...,目的主机会产生一个“端口不可达”错误的ICMP报文,这样traceroute程序要做的就是区分接收到的ICMP报文是超时还是端口不可达,从而来区分是路由器还是目的主机 知识扩展参考资料:http://

3.5K20

linux装载和启动可执行程序的过程

罗军 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 基础知识 编译程序的过程 预处理...,每一个汇编语句几乎都对应一条机器指令 链接:gcc -o hello hello.o -m32 (可执行文件) 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件...动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统中把相应动态库加载到内存中去 ELF格式 ?...在实际的可执行程序或者共享目标文件中,GOT表在名称为.got.plt的section中,PLT表在名称为.plt的section中。   ELF文件符号动态解析的过程 ?   ...load_elf_binary代码 load_elf_binary(struct linux_binprm *bprm) { …… if(elf_interpreter) //使用动态链接

3K40

在 Shell 脚本中跟踪调试命令的执行

Linux 中启用 Shell 脚本的调试模式 在 Shell 脚本中执行语法检查调试模式 在 Shell 脚本中跟踪调试命令的执行 ---- 概述 shell 跟踪简单的来说就是跟踪 shell 脚本中的命令的执行...要打开 shell 跟踪,请使用 -x 调试选项。 这会让 shell 在终端上显示所有执行的命令及其参数。...我们也可以再次跟踪脚本执行,它应该工作得很好: $ sudo /bin/bash -x sys_info.sh ? 现在运行脚本。 $ sudo ./sys_info.sh ?...---- shell 跟踪执行的重要性 hell 脚本跟踪可以帮助我们识别语法错误,更重要的是识别逻辑错误。...因此,下面的行将帮助我们通过跟踪脚本的执行在其中找到这个逻辑错误: 具有逻辑错误的脚本: #!

82220

linux 内核跟踪神器 BPF 及实战

经过扩展后的 BPF 缩写为 eBPF,但也经常仍被称为 BPF,实际上,现在 linux 内核中只有一个 BPF 执行隐层,它同时支持 eBPF 与经典的 BPF 程序,因此,在实际使用中无需区分。...3.1 BCC BCC 是最早用于开发 BPF 跟踪程序的高级语言框架,它提供了一个编写内核 BPF 程序的 C 语言环境,同时提供了供其他高级语言,诸如 C++、Python、Java 调用的用户端接口...3.2 bpftrace bpftrace 是新近出现的专门用于创建 BPF 工具的高级语言支持框架,使用 bpftrace 编写跟踪程序非常方便、快捷,你也可以阅读 bpftrace 工具的源码,非常简洁易懂...快速上手 BCC & bpftrace 5.1 使用 BCC 工具跟踪进程执行 既然完成了 BCC 的安装,你是不是已经跃跃欲试,想要执行一个命令来实践一下了呢?...跟踪进程执行 下面的代码以 syscall:sys_enter_openat 作为插桩点,实现了对每个进程执行 open() 系统调用的跟踪

3K10

Linux内核那些事之连接跟踪

“ 本文分析了Linux内核连接跟踪的关键实现” 连接跟踪(也叫会话管理)是状态防火墙关键核心,也是很多网元设备必不可少的一部分。各厂商的实现原理基本雷同,只是根据各自的业务进行修改和优化。...其中,还有不少厂商干脆是基于Linux内核实现的。下面,我们就来看看Linux内核中连接跟踪的几个要点。...连接跟踪表一般为hash表。该表可能是全局的,也可能是per cpu的,Linux内核选择的是全局表。 每个连接根据自己的状态,都有自己的生命周期,到期会销毁。...并在每个阶段根据优先级执行hook函数或者规则。...其周期性(1s)执行,按顺序遍历全局连接表,淘汰过期连接。 以上三点是连接跟踪中比较大块和重要的部分,除此之外,还有关联连接、扩展支持等。

2.4K20

程序执行的本质

程序执行的本质 程序执行的过程:代码区的指令不断执行,驱使动态数据区和静态数据区产生数据变化。 这一过程需要计算机的管控。下面我们着重介绍对代码区和动态数据区的管控。...对代码区和动态数据区的管控 其中eip永远指向代码区将要执行的下一条指令,它的管控方式有两种,一种是“顺序执行”,即程序执行完一条指令后自动指向下一条执行;另一种是跳转,也就是执行完一条跳转指令后跳转到指定的位置...初始情景: eip指向main函数的第一条指令,此时程序还没有运行,栈空间里还没有数据,ebp和esp指向的位置是程序加载时内核设置的(详情请看《Linux内核设计的艺术》一书)。...ESP寄存器存放当前线程的栈顶指针; EBP寄存器中保存当前线程的栈底指针; call main下面的一条指令地址EIP(也称返回地址)寄存器; 程序开始执行main函数第一条指令,eip自动指向下一条指令...第一条指令的执行,致使ebp的地址值被保存在栈中,保存的目的是本程序执行完毕后,ebp还能返回现在的位置,复原现在的栈。随着ebp地址值的压栈,esp自动向栈顶方向移动,它将永远指向栈顶。

81410

Go 高性能系列教程之四:执行跟踪

不同于pprof的采样分析检测,执行跟踪器是基于运行时环境,且能够知道 Go 程序在特定的时刻正在做什么。但是原理是什么呢? 01 — 什么是执行跟踪器,我们为什么需要它?...要解释什么是执行跟踪器,它又为什么如此重要。最简单的方式就是通过使用 pprof 的代码片段,用 go tool pprof 执行一段性能表现不佳的代码,看看有哪些方面是该工具覆盖不到的。...现在,我们来介绍执行跟踪器:它从另一个不同的角度来分析该程序。...执行跟踪器复用了很多 chrome 浏览器内置的可视化基础组件,所以 go tool trace 扮演了一个服务器,将原始的跟踪信息转换成了 chrome 浏览器可以渲染的数据。...3.3 使用更多的 CPU 从上面我们知道,跟踪程序是顺序执行的,而且并没有利用到多核 CPU 的优势。 曼德勃罗图的生成是可以并发执行的。每个像素都相互独立,他们可以并行的计算。

40910

Linux内核跟踪:ftrace hook入门手册(上)

一、什么是ftrace ftrace(FunctionTracer)是Linux内核的一个跟踪框架,它从2008年10月9日发布的内核版本2.6.27开始并入Linux内核主线[1]。...官方文档[2]中的描述大致翻译如下: ftrace是一个内部跟踪程序,旨在帮助系统的开发人员和设计人员弄清楚内核内部发生的情况。它可以用于调试或分析在用户空间之外发生的延迟和性能问题。...虽然ftrace通常被认为是函数跟踪程序,但它实际上是几个不同的跟踪实用程序的框架。.../posts/linux_rootkits_02/ https://github.com/ilammy/ftrace-hook/ 图2:经典ftrace hook方案中的执行流程[4] 适当建议有余力的读者首先了解一下上述经典方案...接下来我们切换到项目目录内,执行构建: make 正常运行会得到如下结果: 图5:构建命令输出 此时应该会产生一个.ko文件,就是我们刚刚制作的内核模块的可执行文件了: 图6:构建完毕的内核模块

2.2K40
领券