编译,链接与装载执行
大概是rCore-Tutorial系列文章的第一篇。该tutorial大致教学从从头用rust写一个miniOS,加强一下对操作系统的理解
首先来到迷之补基础环节
编译
最初的问题是来自于当初写go的时候的,因为虽然接触了java,js,python,PHP等一众语言,但编译型语言终究只学了大一时的那一点点C++,因此对go,rust等语言的编译情况产生了简单的困惑。
大概是rCore-Tutorial系列文章的第一篇。该tutorial大致教学从从头用rust写一个miniOS,加强一下对操作系统的理解
首先来到迷之补基础环节
最初的问题是来自于当初写go的时候的,因为虽然接触了java,js,python,PHP等一众语言,但编译型语言终究只学了大一时的那一点点C++,因此对go,rust等语言的编译情况产生了简单的困惑。
起因是我发现我的机器由于长期挂着CS的服务端,然后导致我被扫描器发现,并且把我的机器标记成威胁服务器了。。。。
而为了隐藏CS服务端的信息,就需要从几个方面进行改造,其中之一就是经典的ssl证书配置,而其实CS主要需要配的证书有两个:cobaltstrike.store&https-certificate
期间踩了一个很大的坑,关于在win7等较老机器上使用https出现的tls版本问题
teamserver脚本中用keytools生成了一个特征及其明显的自签发证书。该证书仅用于客户端与服务端之间的通信,当然,被扫出来就会是及其明显的服务端标记特征。我估摸着也就是扫描器扫到这个证书然后给我标记了。。。
简单的说就是看计算机基础的时候想起来函数调用的地址应当是在编译时确定的,而ASLR在运行时会对内存地址进行高强度随机化,那这样一来编译时写死的东西不就跑不起来了?然后开始的纠结和挣扎。二进制基础->0太难了啊。
PLT与GOT表,这个是属于之前二进制入门的时候就学过的东西了。PLT位于代码段,可读可执行,GOT表位于数据段,可读可写。PLT和GOT表是动态链接时延迟加载的必备条件。PLT指向GOT表表项,GOT表初始每一项都指向PLT开始处的resolver,当函数第一次被调用时resolver解析函数加载在内存中的地址回填GOT表,即可实现对动态链接运行时加载的函数位置重定向。动态链接库声明的变量理论上来说也位于GOT表中。