Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 使用exe'发布pdb有多安全;s_Security_Debugging_Pdb Files - Fatal编程技术网

Security 使用exe'发布pdb有多安全;s

Security 使用exe'发布pdb有多安全;s,security,debugging,pdb-files,Security,Debugging,Pdb Files,如果我阅读正确,(),pdb包含调试信息。如果将一个与exe一起发布给客户,是否会造成客户或最终用户无法找到源代码的风险 我可能认为,如果您将Visual Studio附加到该过程中,这是可能的,我自己还没有尝试过,但我相当肯定,您不需要将源代码塞进某个地方,以便使用pdb查看入口点,最终查看某些数据所采用的整个路线 如果是这样,是否有办法阻止最终用户这样做?pdb不包含源代码。它包含符号名称(函数、类、全局变量)和有关源文件名/行的信息(如何将RVA转换为文件/行)。所以pdb不会给用户你的源

如果我阅读正确,(),pdb包含调试信息。如果将一个与exe一起发布给客户,是否会造成客户或最终用户无法找到源代码的风险

我可能认为,如果您将Visual Studio附加到该过程中,这是可能的,我自己还没有尝试过,但我相当肯定,您不需要将源代码塞进某个地方,以便使用pdb查看入口点,最终查看某些数据所采用的整个路线


如果是这样,是否有办法阻止最终用户这样做?

pdb不包含源代码。它包含符号名称(函数、类、全局变量)和有关源文件名/行的信息(如何将RVA转换为文件/行)。所以pdb不会给用户你的源代码,而是告诉用户你的源文件的名称以及文件系统中的完整路径
所有内部符号名称

如果用户有足够的知识,您无法阻止用户了解您的程序的功能

即使没有PDB,也可以使用一种称为反向工程的技术来了解程序的功能。像这样的节目真的很擅长。像C#和Java这样使用中间语言的编程语言几乎都是源代码。像这样的工具可以显示反编译的源代码,它与真实源代码的接近程度令人难以置信

关于PDB,有公共PDB和私人PDB。您通常会将公共PDB提供给公众(顾名思义),并保留私有PDB用于内部调试。可以使用名为(使用
-p
参数)的工具将私有PDB(包含更多信息)转换为公共PDB

简而言之,您可以这样想:公共PDB包含关于具有
public
关键字(或等效关键字,取决于您的编程语言)的方法的信息,私有PDB包含关于所有方法的信息(
protected
internal
private
以及任何关键字)

PDB不包含源代码;它们只包含指向编译时使用的文件的链接。这样,人们就可以了解构建服务器的本地文件结构,这可能会被视为一种安全风险。嗯,这是可以接受的

就我个人而言,我不会太担心分发公共PDB。甚至微软也为Windows做了这件事。您可以计算出Microsoft build server的本地目录结构;-)

例如,文件
combase.pdb
(带有symstore散列10edc6786a36fbf7d9ee585f0022cb41)包含(除其他外)

d:\os\obj\x86fre\onecore\com\combase\dll\objfre\i386\combase.def
onecore\base\appmodel\common\removedirectorytree.cpp