小编the*_*ian的帖子

AddressSanitizer 中的“影子字节”是什么,我应该如何解释它们?

我正在调试一个 C 程序,当它发现问题时,我对 AddressSanitizer 输出的下半部分感到非常困惑。例如,让我们使用它:

==33184==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000000005 at pc 0x55f312fe2509 bp 0x7ffc99f5f5c0 sp 0x7ffc99f5f5b0
WRITE of size 1 at 0x602000000005 thread T0
    #0 0x55f312fe2508 in main /home/user/c/friends/main.c:20
    #1 0x7fa5ea0e9b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
    #2 0x55f312fe21c9 in _start (/home/user/c/friends/cmake-build-debug/friends+0x11c9)

0x602000000005 is located 11 bytes to the left of 5-byte region [0x602000000010,0x602000000015)
allocated by thread T0 here:
    #0 0x7fa5eb2b8b40 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xdeb40)
    #1 0x55f312fe23f4 in main /home/user/c/friends/main.c:18
    #2 0x7fa5ea0e9b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)

SUMMARY: AddressSanitizer: heap-buffer-overflow /home/user/c/friends/main.c:20 in …
Run Code Online (Sandbox Code Playgroud)

c memory debugging address-sanitizer

13
推荐指数
1
解决办法
1993
查看次数

是否可以在没有UWP的情况下使用.NET Native?

可以使用.NET Native将C#/ .NET应用程序编译为本机二进制文件而不是UWP应用程序吗?例如,4.5控制台应用程序?我在.NET Native上观看了超过2小时的视频,还阅读了文档,但他们没有明确回答这个问题.

.net c#

12
推荐指数
1
解决办法
1915
查看次数

如何使用 GitHub API 提取私有存储库数据?

我是一个组织的成员,该组织在 GitHub 上拥有很多私人存储库。我需要使用 GitHub API 从私有存储库获取数据。我正在使用以下 python 代码:

url = "https://api.github.com/orgs/myorg/repos?access_token=[mytokenhere]"
headers = {"Authorization": "token [myPATHhere]"}
session = requests.Session()
response = session.get(url, headers = headers)
content = response.text

my_json = json.loads(response.text)


for item in my_json:
    print(item['html_url'])
Run Code Online (Sandbox Code Playgroud)

其中 PAT = 我的访问令牌。这仍然只返回公共存储库。我已经看到了相关的问题,但列出的解决方案并不能解决我的问题。请注意,我已授权我的访问令牌进入私有存储库。我还尝试过 api.github.com/users/repos 和 api.github.com/users/[myorghere] ,但仍然没有返回私人存储库。难道是我没有正确提交token吗?

python github-api

8
推荐指数
1
解决办法
2992
查看次数

假设 NULL 常量为零是否安全?

Richard Reese所著的《理解和使用 C 指针》一书说:

空概念是空指针常量支持的抽象。这个常数可能是也可能不是一个常数零。AC 程序员不需要关心他们实际的内部表示。

我的问题是,由于“这个常数可能是也可能不是常数零”,我在我的代码中执行以下操作是否安全:

int *ptr = NULL;
// Some code which probably sets ptr to a valid memory address

if(!ptr)
{
   ERROR();
}
Run Code Online (Sandbox Code Playgroud)

如果 NULL 不为 0,则 if 子句有可能评估为真。

c null pointers null-pointer

7
推荐指数
1
解决办法
205
查看次数

.NET Core 与 .NET Framework 相比如何在内部工作?

在程序的构建和运行方式方面, .NET Core在内部实现方面与 .NET Framework 有何不同?我知道常规的 .NET Framework/C# 项目基本上被编译成 CIL 代码,分发,然后在运行时由 JITer 编译,最终将它们逐个函数地转换为机器代码(除非程序员指定了预编译选项)。这对于 .NET Core 应用程序也是如此吗?有什么主要区别吗?

注意事项:

  1. 是的,我知道这两件事都非常复杂,我不希望回答者详细解释每个小组件。

  2. 我以前听说过 .NET Framework 的 CLR 被称为虚拟机,但我知道这是有待辩论的,并且在诸如this one 之类的帖子中看到过这样的辩论,就像 CIL 与 Java 字节码的比较一样。这些都是无聊的论点,与问题无关。

  3. 我在那里发现了类似的问题,但是,这些问题似乎集中在 .NET Core 在我们作为客户端程序员的功能/可用性方面有何不同。这个问题与此无关,而是询问 .NET Core 在内部实现方面与 .NET Framework 有何不同。

谢谢你。

.net c# .net-core asp.net-core

6
推荐指数
1
解决办法
2939
查看次数

结构体是如何在C编程语言中实际实现的?

结构是C编程语言中的复合数据结构; 它们由诸如int和指针之类的基元组成,它们以相邻的方式放置在存储器中,例如阵列.

我的问题是,结构本身是由什么构成的?它们是一种阵列吗?例如,哈希表可以实现为链表列表.以类似的方式,什么是实现的结构?如果需要,请在x86汇编级别解释.谢谢.

c x86 assembly struct

6
推荐指数
1
解决办法
752
查看次数

对于.cs文件,Visual Studio 2015解决方案资源管理器中的虚线文件图标的含义是什么?

这个虚线文件图标是什么意思?这是一个.cs文件,但它在我的项目中表现不正常,我在解决方案资源管理器中注意到了这个单独的图标:

在此输入图像描述

我已经在三个地方检查了MSDN文档

MSDN的另一页

在MSDN的另一页

我还检查了Visual Studio文档本身,它本身就是模糊不清的.

我甚至检查了这个网站:

堆栈溢出搜索

最后,我发现这个主题有一个类似的问题,但问题页面和里面的引用 都没有这个图标.谢谢你的帮助.

c# visual-studio visual-studio-2015

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

什么时候应该使用Win32/WinAPI类型而不是标准C类型?

我迟到对Win32党和有功能如海_tprintf,TEXT()外,还有库,例如strsafe.h其中有这样的功能,如StringCchCopy(),StringCchLength()等.基本上,Win32 API中引入了大量额外的功能和类型上的C其顶部可能会让一个没有使用Win32的C程序员感到困惑.我在MSDN上找到这些类型和函数的定义没有问题.但是,我确实在查找何时以及为何应该使用这些指南时遇到问题.

我有两个问题:

  1. 在使用Win32编程时,使用Microsoft在标准C之上提供的所有这些类型和特殊功能有多重要?废除所有标准C函数和类型并完全使用Microsoft包装器被认为是一种好习惯吗?

  2. 是否可以将标准C函数与这些Microsoft类型和函数混合使用?例如,使用malloc()代替HeapAlloc(),或使用printf()而不是_tprintf()等...?

我有一份Charles Petzold编程的Windows第五版书,但它主要涵盖了GUI的内容,而不是API的其余部分.

c windows winapi

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

如何将非静态数据发送到 Rust 中的线程?本示例中是否需要它?

我正在尝试使用 Rust 中的一些堆数据启动一个新线程,但我收到了一堆错误,这些错误源于数据需要具有'static生命周期。我已经按照我的方式倒退了我的程序,但遇到了问题。

use std::sync::Arc;
use std::thread;

struct ThreadData {
    vector_of_strings: Vec<String>,
    terms: Vec<&'static str>,
    quotient: usize,
}

fn perform_search(slice: &[String], terms: &[&str]) {
    /* ... */
}

fn threaded_search(td_arc: &Arc<ThreadData>) {
    let no_of_lines = td_arc.vector_of_strings.len();
    let new_tda1 = td_arc.clone();

    let strings_as_slice1 = new_tda1.vector_of_strings.as_slice();   

    thread::spawn(move || {
        perform_search(&strings_as_slice1[0..td_arc.quotient], &new_tda1.terms);
    });
}

fn main() {
    let td = ThreadData {
        vector_of_strings: Vec::new(),
        terms: Vec::new(),
        quotient: 0,
    };

    let td_arc = Arc::new(td);
    threaded_search(&td_arc);
}
Run Code Online (Sandbox Code Playgroud)

错误:

use std::sync::Arc;
use std::thread;

struct …
Run Code Online (Sandbox Code Playgroud)

concurrency multithreading thread-safety rust

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

如何删除 Go 二进制文件的 .gopclntab 和(可选).gosymtab 部分?

我在 Linux x86_64 上编程。我运行readelf -S ./mybinary并看到 Go 编译器将这两个名为.gopclntab和 的部分.gosymtab放入二进制文件中。看来至少.gopclntab在运行时没有必要。我偶然发现这篇文章证实了这一点:

\n
\n

不幸的是,使用 cgo 的 Go 二进制文件没有这些 Go ELF\n部分。正如构建更好的 Go 链接器中提到的:

\n

对于可能任意使用 C 库的 \xe2\x80\x9ccgo\xe2\x80\x9d 二进制文件,\nGo 链接器将所有 Go 代码链接到单个本机对象文件\n然后调用系统链接器来生成最终的二进制文件。

\n
\n

显然,这些对于程序正常运行来说并不是严格必要的。但是,该strip实用程序不会删除它们,可能是因为它不知道这些特定于 Go 的部分。请注意,即使我使用go build -ldflags="-s -w",这些部分仍然存在。

\n

有没有办法将它们从使用中剥离出来cgo

\n

binary go compiler-optimization

5
推荐指数
0
解决办法
630
查看次数