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

这个'ld‘链接器脚本中的堆栈是否覆盖了存储的可执行文件?

在云计算领域中,'ld'链接器脚本是用于将多个目标文件链接成一个可执行文件的工具。堆栈是指程序在运行过程中使用的一种数据结构,用于存储函数调用和返回的信息。

关于这个问题,'ld'链接器脚本本身并不会直接影响存储的可执行文件。它的主要作用是定义链接过程中的一些规则和参数,例如内存布局、符号解析、库的链接等。堆栈的使用与链接器脚本无关,它是在程序运行时动态分配的。

链接器脚本中的堆栈通常用于定义可执行文件的内存布局,包括堆、栈、全局变量等的分配方式和大小。通过在链接器脚本中指定堆栈的起始地址和大小,可以对可执行文件的内存使用进行控制和优化。

然而,链接器脚本中的堆栈定义并不会直接影响存储的可执行文件本身。存储的可执行文件是由编译器生成的,链接器脚本只是在链接过程中起作用。因此,堆栈的定义不会覆盖存储的可执行文件。

总结起来,'ld'链接器脚本中的堆栈定义不会直接覆盖存储的可执行文件,它只是在链接过程中用于控制可执行文件的内存布局。在实际应用中,开发人员可以根据需求和性能优化的考虑,通过调整链接器脚本中的堆栈定义来优化可执行文件的内存使用。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云视频处理(VOD):https://cloud.tencent.com/product/vod
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解析近期爆发服务挖矿病毒原理

事情起因:同事解决服务挖矿病毒过程 可以看到,病毒主要起因是利用了Linux预加载型恶意动态链接后门,关于Linux预加载知识可以参考这一篇文章:警惕利用Linux预加载型恶意动态链接后门...: 观察病毒链接库里 fopen 函数,可以看到对 tcp, tcp6 和 stat 文件进行了特殊处理: 而 forge_proc_net_tcp 和 forge_proc_cpu 写了文件已达到伪造目的...三、病毒攻击 在第一部分可以看到,该恶意链接库覆盖了比较多系统库函数,但是其中大部分函数都是为了保护该恶意链接库而覆盖,具有攻击作用只有一个函数,就是 access 函数,看一下 access...原本 access 函数作用是执行文件时判断文件是否可操作,所以整个系统调用 access函数地方非常多而且非常频繁,因此一旦病毒注入成功,那么脚本添加过程就会非常频繁,就会出现删除 crontab...仅删除 crontab 脚本并不能起到作用,然后因为病毒自我保护措施,覆盖了几乎所有能操作到病毒命令,所以也很难通过系统命令来清除病毒链接库。

1.9K10

用GCC开发STM32入门二

之前从网上下载了一份用GCC开发stm32程序,也是用stm32库函数编程,启动文件是startup_stm32f10x_hd.s,链接脚本文件是从gcc_ride7拷贝出stm32f10x_flash_extsram.ld...然后链接脚本文件告知链接,把所有目标文件相应段连接到一起,并把目标文件“变量地址”“函数地址”重定位至正确地址空间; 编写前需要知道C程序编译后典型内存布局 ,单片机启动流程以及链接脚本文件作用和编写等知识...通过链接脚本控制这个表将放在正文区最开始,正文区又将从flash最开始 存放,这样这个向量表就会起到相当于存放在0x0000 0000开始地址空间效果。...gpio_test.o 注意参数 -nostartfiles指示不要包含编译自带启动代码,-T stm32f103VBT6.ld表示使用stm32f103VBT6.ld这个链接脚本。...step2: arm-elf-ld -T stm32f103VBT6.ld -o gpio_test.out gpio_test.o 同样使用stm32f103VBT6.ld这个链接脚本

1.8K20
  • 事件分析 | Linux watchdogs 感染性隐藏挖矿病毒入侵还原录

    修改环境变量,将常见可执行文件目录添加到系统路径,确保脚本shell命令正常执行;同时再次写crontab任务。 2....连接历史进行横向扩展; 2、crontab任务执行bash脚本,进行相关清理和下载执行恶意程序watchdogs并横向扩展: a)写crontab任务; b)清理其他恶意程序; c)解锁删除相关系统文件.../目录并加入开机启动项和服务项; c)释放libioset.so并写入/etc/ld.so.preload实现进程等隐藏; d)访问ident.me获取机器外网IP; e)再次写crontab任务;...而相对与过去我们分析过隐藏进程挖矿病毒,在该病毒释放动态链接同步对unlink函数进行了过滤,过滤名称同时包含ld.so.preload和libioset.so,而同时由于删除、查看等系统命令函数也受过滤影响...挖矿木马清理方法 1、删除恶意动态链接库/usr/local/lib/libioset.so; 2、排查清理/etc/ld.so.preload是否加载1恶意动态链接库; 3、清理crontab异常项

    3.4K50

    动态链接相关结构

    是不是所有的*NX系统动态链接都位于 /lib/ld.so呢?实际上,动态链接位置既不是由系统配置指定,也不是由环境参数决定,而是由ELF可执行文件决定。...在LINUX下,可执行文件所需要动态链接路径几乎都是 “/lib/ld-linux.so.2”,其他*.nix操作系统可能会有不同路径。我们在后面还会介绍到各种环境下动态链接路径。...在LINUX系统,/lib/ld-linux.so.2通常是一个软链接,比如在我机器,它指向/lib/ld-linux.so.2,这个才是真正动态链接,在linux,操作系统在对可执行文件所需要相应动态连接...当系统Glibc库更新或者安装其他版本时候,/lib/ld-linux.so.2 这个链接就会指向新动态链接,而可执行文件本身不需要修改 ".interp" 动态链接路径来适应系统升级...,所以它需要重定位; 动态链接时进程堆栈初始化信息 站在动态链接角度看,当操作系统把控制权交给它时候,它将开始做链接丁作,那么至少它需要知道关于可执行文件和本进程一些信息,比如可执行文件有几个段

    1.7K20

    含大量图文解析及例程 | Linux下ELF文件、链接、加载与库(

    而我们用cat /proc/[PID]/maps 来查看这个程序内存内容,看到我们之前提到代码、数据、堆区、堆栈、vvar、vdso、vsyscall都已经被映射进了内存。...这样才能验证我们动态链接是不是在内存真的只有一份代码,我们用下面的脚本来完成: #!...可以看到动态链接路径在.interp这个段中体现,并且通常它是个软链接,最终链接在像ld-2.27.so这样共享库上。...它对应是elf.hElf64_Dyn这个结构体。 动态链接ld 对于动态链接可执行文件,内核会分析它动态链接地址,把动态链接映射到进程地址空间,把控制权交给动态链接。...适应为/usr/lib和/lib是系统级动态链接目录,我们要创建自己第三方库最好不要直接放在这个目录,而是创建一个自己动态链接库目录,并将这个目录添加到环境变量 LD_LIBRARY_PATH

    3.1K21

    CVE-2021-4034 Linux Polkit 权限提升漏洞挖掘思路解读

    工具将判断传入参数是否为绝对路径,如果给出非绝对路径,Pkexec工具也将尝试在 path 定位program,具体做法是在PATH 环境变量目录搜索要执行program。...要回答这个问题,我们需要知道是:当execve() 一个新program时,kernel将我们参数、环境变量字符串以及指针(argv 和 envp)复制到新program堆栈末尾,如下图: 由于...”可执行文件。...最后,这个完整路径被越界写入 argv[1](即 envp[0]),从而覆盖了我们第一个环境变量,见下图红框处: 所以准确说:如果我们 PATH 环境变量是“PATH=name”,并且如果目录“...这些“不安全”变量通常在调用 main() 函数之前已经被ld.so从 SUID 程序环境删除。

    1.6K90

    【Linux】《how linux work》第十五章 开发工具

    ,必须运行链接,即Unixld命令。...以 .a 结尾库文件(例如 libgobject.a)被称为静态库。 当你将程序与静态库进行链接时,链接会将库文件机器码复制到可执行文件。...接下来,动态链接会在系统缓存/etc/ld.so.cache查找,以查看库是否位于标准位置。...当动态运行时链接遇到这个变量时,它通常需要多次搜索每个指定目录全部内容,这会导致性能大幅下降,更重要是,由于运行时链接会在这些目录搜索每个程序,可能会出现冲突和不匹配库。...Therefore, even this is a script: 在Unix,任何以#!开头可执行文本文件都被视为脚本。 在这个前缀之后路径名是脚本语言解释可执行文件

    10510

    从零手写操作系统之RVOS内存管理模块简单实现-02

    ld链接链接脚本功能非常强大,我们接下来以ld作为主要介绍对象。 ld 在用户没有指定链接脚本时候会使用默认链接脚本。...ld会根据命令行要求使用相应链接脚本文件来控制链接过程,当我们使用ld链接生成一个可执行文件时候,它就会使用elf_i386.x作为链接控制脚本; 当我们使用ld来生成一个共享目标文件时候,它就会使用...在编译普通应用程序时,可以使用默认链接脚本,但是对于内核程序来说,它本身也是一个.elf文件,这个.elf文件该怎么组织,各个段放到内存什么地方,这个由于和底层硬件强相关,所以需要我们自己编写相关链接脚本...---- 基于符号定义获取程序运行时内存分布 参考课程02节os.ld链接脚本文件 如何在代码获取在链接脚本定义相关符号值呢?...链接脚本用于指导链接如何组织可执行文件各个部分,包括代码段、数据段、符号表等。 在C代码,无法直接引用链接脚本定义符号值,因为C编译并不了解链接脚本细节。

    23140

    Linux命令(65)——ld命令

    1.命令简介 ld命令是二进制工具集GNU Binutils一员,是GNU链接,用于将目标文件与库链接为可执行程序或库文件。...>,--mri-script=:为与MRI链接兼容,ld接受由MRI命令语言编写脚本文件 --cref:创建跨引用表 -d,-dc,-dp:即使指定了可重定位输出文件...这仅在生成动态链接ELF可执行文件时才有意义。默认动态链接通常是正确,除非您知道正在做什么,否则不要使用该选项。...此脚本将替换ld默认链接脚本(而不是添加到其中),因此脚本必须指定输出文件所需所有内容。...如果当前目录不存在脚本文件,“ld”会在-L选项指定目录查找 -Ttext=:使用指定地址作为文本段起始点 -Tdata=:使用指定地址作为数据段起始点 -Tbss=<

    17.5K13

    动态库详解

    死代码删除 dead code stripping 链接时候, 链接提供代码优化方式 证明步骤 test.m里面没有用静态库东西 编译,链接生成可执行文件 (链接默认_noall_load)...-l) -> 修改成功后, 需要重新链接动态库 -> 再查看是否链接成功 最好是在生产动态库时候, 路径就修改好 -> 改动态库脚本 -> 最后链接生成动态库时候 -> 添加参数-install_name...MachO提供 去查看可执行文件是否有@rpath -> otool -l test | grep 'RPATH' -A 5 -> 发现没有 注意此处大小写敏感 在可执行文件添加@rpath -...loader_path说明,动动链接 可执行文件 -> 链接了一个动态库, 但是同时我这个动态库里面 -> 链接有其他动态库 注意: 此时编译应该从后往前编译 -> 即先编译最里面的动态库 (01...-> 正常开发系统提供链接 前面的可执行文件 -> -Xlinker -rpath -Xlinker @executable_path/Frameworks 中间动态库 -> -Xlinker

    89020

    动态库

    死代码删除 dead code stripping 链接时候, 链接提供代码优化方式 证明步骤 test.m里面没有用静态库东西 编译,链接生成可执行文件 (链接默认_noall_load)...-l) -> 修改成功后, 需要重新链接动态库 -> 再查看是否链接成功 最好是在生产动态库时候, 路径就修改好 -> 改动态库脚本 -> 最后链接生成动态库时候 -> 添加参数-install_name...MachO提供 去查看可执行文件是否有@rpath -> otool -l test | grep 'RPATH' -A 5 -> 发现没有 注意此处大小写敏感 在可执行文件添加@rpath -...loader_path说明,动动链接 可执行文件 -> 链接了一个动态库, 但是同时我这个动态库里面 -> 链接有其他动态库 注意: 此时编译应该从后往前编译 -> 即先编译最里面的动态库 (01...-> 正常开发系统提供链接 前面的可执行文件 -> -Xlinker -rpath -Xlinker @executable_path/Frameworks 中间动态库 -> -Xlinker

    1.1K30

    如何进行Linux平台共享库替换

    预处理过程主要处理源代码以“#”开始预编译指令;编译过程把预处理完成文件进行词法、语法、语义等分析并产生相应汇编代码文件;汇编过程将汇编代码文件翻译成机器可以执行目标文件;链接过程将汇编生成目标文件集合相连接并生成最终可执行文件...链接方式分为静态链接和动态链接,静态链接分发程序只需要生成可执行文件,动态链接分发程序不仅需要可执行文件,还要包含相应库文件。...POKEDATA,Pid,Addr,Data); 实现向目标进程内存写入一个字节数据功能。Pid表示目标进程标识符,Addr存储写入内存地址,Data为要写入数据。...字符,其中方框标识空指令是为堆栈恢复和函数返回指令预留存储空间。...,0x0a 以上空指令nop,是为堆栈恢复和函数返回指令预留存储空间,预留空指令空间必须比被替换程序动态库堆栈恢复和函数返回指令占用空间大。

    2.9K80

    Linux:基础IO(三.软硬链接、动态库和静态库、动精态库制作和加载)

    -lmyc:这个选项告诉编译链接名为 libmyc.so 库文件。通常,-l 选项后面跟着是库文件名称,编译会在指定库路径查找该库文件。 -L ..../mylib/lib:这个选项告诉编译在 ./mylib/lib 目录查找库文件。编译会在指定路径搜索您指定库文件,以便在链接阶段正确地链接库文件。...=$LD_LIBRARY_PATH:自己库绝对路径 LD_LIBRARY_PATH:在 Shell 脚本或命令LD_LIBRARY_PATH 表示引用环境变量 LD_LIBRARY_PATH 值...通过设置 LD_LIBRARY_PATH 环境变量,您可以告诉系统在哪些路径查找动态链接库。这个环境变量在编译和运行需要动态链接程序时非常有用。...当处理需要访问内存时,会使用CR3寄存存储页目录表地址来查找对应页表,进而将虚拟地址转换为物理地址。

    18710

    深入浅出链接库 | 静态库与动态库

    动态链接实现是这样,在编译时首先由静态链接将所有的目标文件链接为一个可执行文件,等到程序运行时会将要用到动态库加载到内存共享库段,由动态链接完成可执行文件和动态库文件链接工作,可以理解为按需载入内存...库文件与头文件 我们在发布库文件同时,要将库文件和头文件一起发布,头文件存储了变量、函数或者类等这些功能模块声明部分,库文件存储了各模块具体实现部分。...② 配置环境变量 实际上, ld 链接在寻找库路径时候,都是通过一个环境变量 LD_LIBRARY_PATH 来寻找,我们可以打印看一下这个环境变量 我们可以通过 export 命令来给环境变量增加一个路径...bashrc 配置文件在家目录下 vim ~/.bashrc ③ 修改 ld.so 加载配置文件 ld.so.conf 这里先介绍几个概念: ld链接 :gcc 可以在编译周期传递参数,指定需要链接库文件...ld.so动态链接/加载,程序运行时候会根据指定路径去加载指定库,生命周期是在 run-time。

    34010

    别被谭浩强《C程序设计》带偏了!

    这个问题展开可以聊东西非常多,从编程语言到可执行文件,从堆栈空间到虚拟内存,可以帮助面试官快速了解候选人这部分知识储备。...而实际上,我发现对于这个问题,基本上没有人能够说得特别清楚,各种是似而非回答: “代码段” “静态存储区” “动态数据区” “堆栈区” 一系列书本气十足说法,不一而足。...你可能会问:那我写Java程序、Python脚本程序呢?它们进程空间中没有可执行文件吧?...Python是解释执行脚本语言,执行Python脚本时候,也是先启动Python解释程序,这也是一个EXE/ELF格式可执行文件,再由解释解释执行Python脚本。...其他脚本语言也差不多类似。 总之,所有程序执行,都会有一个核心可执行文件

    13010

    含大量图文解析及例程 | Linux下ELF文件、链接、加载与库(下)

    以Linux运行库glibc为例,所谓入口函数,其实 就是指ld 默认链接脚本所指定程序入口_start (默认情况下)。...大家注意,这里还多了一个奇怪家伙:解释,interpreter /lib64/ld-linux-x86-64.so.2。 实际上,它就是动态链接文件链接加载。...我们之前已经介绍过,在动态链接可执行文件,外部符号地址在程序加载、运行过程才被确定下来。这个链接加载 ld 就是负责完成这个工作。...当 ld 将外部符号地址都确定好之后,才将指令指针执行程序本身_start。也就是说,在动态链接可执行文件,第一条指令应该在链接加载 ld 。...而在链接静态库时,链接会把静态库目标文件取出来和可执行文件真正链接在一起。 静态库链接后,指令由相对地址变为绝对地址,各段加载地址定死了。

    1.4K22

    浅谈Linux动态链接

    可执行文件,printf()函数相对于文件头偏移量是确定,所以说它地址在编译链接后就是确定。...动态链接优缺点 相比之下,动态链接主要有以下好处: 多个可执行文件可以共享使用系统共享库。每个可执行文件都更小,占用磁盘空间也相对比较小。...静态链接任何函数有了改动,除了静态链接库本身需要重新编译构建,依赖这个函数所有可执行文件都需要重新编译构建一遍。...如果某个Linux程序报错提示缺少某个库,可以用ldd命令可以用来检查这个程序依赖了哪些库,是否能在磁盘某个路径下找到.so文件。...这些位置动态链接库很多,如果链接每次都去这些路径遍历一遍,非常耗时,Linux提供了ldconfig工具,这个工具会对这些路径动态链接库按照SONAME规则创建软连接,同时也会生成一个缓存Cache

    9K30

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

    -m32(目标代码) 汇编是将汇编代码转变成机器可以执行命令,每一个汇编语句几乎都对应一条机器指令 链接:gcc -o hello hello.o -m32 (可执行文件) 通过调用链接ld链接程序运行需要一大堆目标文件...,以及所依赖其它库文件,最后生成可执行文件 静态链接和动态链接 静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大。...当在程序引用某个共享库符号时,编译链接阶段并不知道这个符号具体位置,只有等到动态链接将所需要共享库加载时进内存后,也就是在运行阶段,符号地址才会最终确定。...在编译链接时,链接并不能控制执行从一个可执行文件或者共享文件中转移到另一个(这时候函数地址还不能确定),因此,链接将控制转移到PLT某一项。...pushl n地址,实际上就是顺序执行下一步 (3)执行pushl n,n为puts函数地址在GOT表位置,向堆栈压入这个偏移量主要作用就是为了找到puts函数符号名以及puts函数地址在

    3.1K40

    动态链接

    采用动态链接库实现链接操作时,程序文件哪里需要库文件功能模块,GCC 编译不会直接将该功能模块代码拷贝到文件,而是将功能模块位置信息记录到文件,直接生成可执行文件。...这样带来好处是可执行文件记录是功能模块地址,真正实现代码会在程序运行时被载入内存,这意味着,即便功能模块被调用多次,使用都是同一份实现代码(这也是将动态链接库称为共享链接原因)。...直接制作 GCC使用-shared 选项用于生成动态链接库;GCC使用-fpic(还可写成 -fPIC)选项功能是,令 GCC 编译生成动态链接库(多个目标文件压缩包)时,表示各目标文件函数、类等功能模块地址使用相对地址...其中 xxx 为动态链接库文件绝对存储路径(此方式仅在当前终端有效,关闭终端后无效); 修改~/.bashrc 或~/.bash_profile 文件,即在文件最后一行添加export LD_LIBRARY_PATH...=$LD_LIBRARY_PATH:xxx(xxx 为动态库文件绝对存储路径)。

    1.6K20
    领券