小编Shu*_*eng的帖子

MS 加载程序将 PE 文件的哪些部分映射到内存中?

MS 加载程序将 PE 文件的哪些部分映射到内存中?

从 PE 文档中,我可以推断出 PE 可执行文件的典型格式(见下文)。

我知道,通过检查,PE 文件的所有内容,直到并包括节头,都完全按照存储在磁盘上的方式映射到内存中。

接下来发生什么?

文件的其余部分是否也被映射(在这里我指的是下图中的图像页面部分),以便整个文件完全像存储在磁盘上一样在内存中,或者加载程序是否比这更具选择性?

在文档中,我发现了以下代码段:

另一个例外是属性证书和调试信息必须放在图像文件的最后,属性证书表紧跟在调试部分之前,因为加载程序不会将它们映射到内存中。但是,关于属性证书和调试信息的规则不适用于目标文件。

这就是我能找到的关于加载器行为的全部内容;它只是说这两部分必须放在文件的最后,因为它们不会进入内存。

但是,如果加载程序加载除这两部分之外的所有内容,并且我将 RVA 部分设置得足够高,那么实际上会在内存中复制部分数据(一次在映射文件中,一次用于 RVA 指定的位置)?

如果可能,请链接到我可以进一步阅读有关特定于 MS Windows 的加载的地方。

在此处输入图片说明

windows x86 assembly loader portable-executable

5
推荐指数
1
解决办法
2262
查看次数

我应该在LLVM 3.9.1中用什么替换getGlobalContext()?

做旧教程,我经常看到使用了getGlobalContext().但是,在LLVM 3.9.1中,无法再找到此功能.

我应该用相同的行为替换这些调用?

c++ llvm llvm-clang

5
推荐指数
1
解决办法
2380
查看次数

在Visual Studio Code中指定库路径?

如何指定库路径,即在Visual Studio Code(C ++)中在哪里查找静态/共享库?

我已经指定了包含路径(头文件),如下所示:

   "includePath": [
        "${workspaceRoot}",
        "/usr/include/x86_64-linux-gnu/c++/6",
        "/usr/include/c++/6",
        "/usr/local/include",
        "/usr/include/x86_64-linux-gnu",
        "/usr/include"
    ]
Run Code Online (Sandbox Code Playgroud)

我一直在寻找一个名为“ libraryPath”的JSON属性,但找不到任何属性。

c++ ide ubuntu

5
推荐指数
1
解决办法
2376
查看次数

SSH 动态转发 (-D) 在幕后是如何工作的?

SSH 动态转发 (-D) 在幕后是如何工作的?

据我了解,SSH 动态转发会在本地主机上打开 SOCSK4 代理,并且与 SOCK4 代理的每个连接都会通过 SSH 隧道转发到远程目标。

SSH 是否拦截与 SOCKS4 代理的连接?我的意思是,它不能是“普通”SOCKS4 代理,因为那样它会直接代理到远程主机的连接。

此外,SSH 如何处理来自远程主机的响应,即如何通过 SSH 隧道将它们传输回本地主机上的接收者?

ssh

5
推荐指数
1
解决办法
1551
查看次数

如何使用shell命令在GDB中设置环境变量?

我只想在其环境中运行gdb一个变量MyVar

但是,变量的内容非常复杂,包含不可打印的ASCII,因此最好使用例如设置MyVar=$(python -c 'print("\xff...")')

我有两个选择:

  1. 在运行之前设置MyVarin 。然后在内部,使用(非常乏味!)单独删除所有其他环境变量。bashgdbgdbunset environment NAME

  2. 使用清除所有环境变量unset environment。然后在内部gdbMyVar使用shell命令进行设置(如上所述)(如何?)

有任何想法吗?

linux x86 gdb

5
推荐指数
2
解决办法
440
查看次数

如何将 POST 请求正文中的有效 XML 提交到使用 XML 的 ASP.NET Core Web API?

我已经安装Microsoft.AspNetCore.Mvc.Formatters.Xml并设置如下ConfigureServices()

services.AddMvc().AddXmlSerializerFormatters();
Run Code Online (Sandbox Code Playgroud)

现在,我创建了一个简单的 Web API,如下所示:

[HttpPost]
[Consumes("application/json", new string[]{"application/xml"})]
public ActionResult<string> OnPost([FromBody] ZapScan scan)
{
    return scan.ToString();
}
Run Code Online (Sandbox Code Playgroud)

接受一个ZapScan通过模型绑定:

public class ZapScan
{
    public string Url { get; set; }
    public bool Priority { get; set; }

    public override string ToString()
    {
        return $"url={Url}, priority={Priority}\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我从 Postman 发送的任何 XML 都被拒绝,例如:

<?xml version="1.0" encoding="UTF-8"?>
<zapscan>
    <url>http://www.example.cm</url>
    <priority>false</priority>
</zapscan>
Run Code Online (Sandbox Code Playgroud)

结果是:

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"|f16a42f4-4c8f4678c6f84eb7.","errors":{"":["An error occurred while deserializing input data."]}}
Run Code Online (Sandbox Code Playgroud)

如何将 POST …

.net c# asp.net .net-core

5
推荐指数
1
解决办法
2888
查看次数

Git 子模块的 gitlink 条目位于哪里?

在哪里可以看到 中提到的 gitlink 条目gitsubmodules(7)

对于工作目录为 的子模块path/to/bar/,gitlink 条目应该位于/path/to/bar并包含子模块提交的 SHA-1 哈希值?

$ git submodule status
 139dedcb98fca8fb69d70305709783ff40316cd4 tabulous (0.5.0-2-g139dedc)
 24afe922e6a05891756ecf331f39a1f6743d3d5a vim-repeat (v1.2-9-g24afe92)
 f51a26d3710629d031806305b6c8727189cd1935 vim-surround (v2.1-18-gf51a26d)
$ ls -la tabulous/
total 72
drwxr-xr-x  8 nlykkei  staff   256B Apr  5 17:25 ./
drwxr-xr-x  5 nlykkei  staff   160B Apr  4 12:00 ../
-rw-r--r--  1 nlykkei  staff    67B Apr  4 12:00 .git
-rw-r--r--  1 nlykkei  staff    21B Apr  4 12:00 .gitignore
-rw-r--r--  1 nlykkei  staff    18K Apr  4 12:00 LICENSE
-rw-r--r-- …
Run Code Online (Sandbox Code Playgroud)

linux git

5
推荐指数
1
解决办法
1660
查看次数

Asio:是否有可自动调整大小的缓冲区来接收输入?

Asio:是否有可自动调整大小的缓冲区来接收输入?

我事先并不知道要收到的尺寸,所以我将这个数量发送到标题中.

我查看了http://www.boost.org/doc/libs/1_59_0/doc/html/boost_asio/example/cpp03/chat/chat_message.hpp以获取使用标题的示例,但此示例假定规范为最大体型.

看一下asio :: buffer类,我必须提供一些底层缓冲区,因此不灵活.相反,我看向asio :: streambuf类,但是如下所示使用它会产生分段/内存错误.

我尝试给出最大大小以只读取HEADER_LEN字节即标题.

这种方法有误吗?

void do_recv_header() 
{
    asio::streambuf buf(HEADER_LEN);
    asio::async_read(*g_selected_conn, buf, [this, &buf](const system::error_code& ec, std::size_t bytes_transferred)
    {
        if (ec != 0) {
            std::cout << "async_read() error: " << ec.message() << " (" << ec.value() << ") " << std::endl;
            remove_closed_conn(g_selected_conn);
            SetEvent(g_wait_event);
        }
        else {
            std::istream is(&buf);
            int body_len;
            is >> body_len;
            std::cout << body_len << std::endl;
            do_recv_body(body_len);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio

4
推荐指数
1
解决办法
1560
查看次数

如何根据缓冲区中已经找到的单词使 Vim 自动完成一个单词?

如何根据缓冲区中已有的单词使 Vim 自动完成单词?

如何根据缓冲区中已经找到的单词使 Vim 自动完成单词,就像 Emacs (M-%) 一样?

vim

4
推荐指数
2
解决办法
1008
查看次数

如何为 `dotnet` 和 macOS 使用 `PublishSingleFile` 选项?

dotnet在 macOS 上使用并想为 Linux 构建一个应用程序。为了实现这一点,我使用以下命令:

dotnet --version #
3.0.101

dotnet new console -n HelloWorld

dotnet publish --self-contained --runtime linux-x64 -o ./linux-publish
Run Code Online (Sandbox Code Playgroud)

根据文章,该dotnet命令应支持命令行标志,以应用程序打包成一个单一的可执行文件:

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true
Run Code Online (Sandbox Code Playgroud)

我的问题有两个:

  1. 为什么在 macOS 上没有PublishSingleFile选项dotnet
  2. 为什么dotnet同时创建一个 HelloWorld 可执行文件和一个 HelloWorld.dll?

c# linux macos .net-core

4
推荐指数
1
解决办法
1200
查看次数

标签 统计

c++ ×3

linux ×3

.net-core ×2

c# ×2

x86 ×2

.net ×1

asp.net ×1

assembly ×1

boost ×1

boost-asio ×1

gdb ×1

git ×1

ide ×1

llvm ×1

llvm-clang ×1

loader ×1

macos ×1

portable-executable ×1

ssh ×1

ubuntu ×1

vim ×1

windows ×1