当前位置:网站首页>C# 谁改了我的代码
C# 谁改了我的代码
2022-08-04 14:48:00 【林德熙】
本文告诉大家一个特殊的做法,可以修改一个字符串常量
我们来写一个简单的程序,把一个常量字符串输出
private const string str = "lindexi";
static void Main(string[] args)
{
Foo();
Console.WriteLine(str);
}其中的 Foo 是其他的函数,大家可以猜到输出是 lindexi ,但是,实际上把Foo调用函数添加之后,输出是 Lindexi 被大写了。那么这时 Foo 做了什么?
Foo 做的就是 C# 字符串首字符大写
public static unsafe void Foo()
{
fixed (char* ptr = str)
{
*ptr = char.ToUpper(*ptr);
}
}虽然出现了问题,但是找到问题很简单,如果这时需要做一个安全有关的。让别人看到源代码也不知道怎么使用,那么就可以使用这个科技,下面就是显示技术的时候
我把 Foo 做一些修改,把 str 变量去掉,这样大家就难以通过搜索变量引用找到了这个函数。但是我在其他的某个地方使用了这个常量字符串,于是就把上面的 str 修改为 “lindexi” 。大家也许会想,这是两个变量,对他做什么修改也不会对之前的 str 有什么影响。实际上,请跑一下下面的代码。
public static unsafe void Foo()
{
fixed (char* ptr = "lindexi")
{
*ptr = char.ToUpper(*ptr);
}
}这时输出 str 结果是 Lindexi ,因为编译器把相同的常量视为同一个地址,这样修改一个地方的常量就可以修改其他地方的。所以可以写的是一个常量,实际上这个常量在另一个地方被修改。
如果我代码很多,在某个地方使用了反射,反射一个方法,这个方法是修改一个常量的值,常量是写自己写的,没有引用。这时可以发现代码执行就可以更改之前的字符串值。实际上不只字符串,其它的常量也可以修改。多使用这些技术,可以让看代码的人成为强大的杀人狂。
这个方法是不推荐在一般情况使用,因为谁都不能说没有其他地方使用一样的字符串。
边栏推荐
- Leetcode: 215 disorderly to find the first big k element in the array
- 爬虫——selenium基本使用、无界面浏览器、selenium的其他用法、selenium的cookie、爬虫案例
- 数据库恢复
- 【硬件架构的艺术】学习笔记(1)亚稳态的世界
- 1401 - Web technology 】 【 introduction to graphical Canvas
- CF1527D MEX Tree(mex&树&容斥)
- 化繁为简,聊一聊复制状态机系统架构抽象
- leetcode: 255 Verify preorder traversal sequence binary search tree
- 【Today in History】August 4: First female Turing Award winner; NVIDIA acquires MediaQ; first Cybersecurity Challenge completed
- 九州云出席领航者线上论坛,共话5G MEC边缘计算现状、挑战和未来
猜你喜欢
ping的原理

ASA归因:如何评估关键词的投放价值

leetcode: 255 Verify preorder traversal sequence binary search tree

【Web技术】1401- 图解 Canvas 入门

centos7安装mysql急速版

【北亚数据恢复】IBM System Storage存储lvm信息丢失数据恢复方案

Technology sharing | Mini program realizes audio and video calls

Crawler - basic use of selenium, no interface browser, other uses of selenium, cookies of selenium, crawler cases

Phasecraft连下两城,助力英国量子技术商业化加速!

程序猿七夕礼物-如何30分钟给女朋友快速搭建专属语聊房
随机推荐
How to Identify Asynchronous I/O Bottlenecks
Technology sharing | Description of the electronic fence function in the integrated dispatching system
属于程序猿的浪漫
关于pnpm包管理器的版本问题
Rust 从入门到精通04-变量
G. Mountaineering Squad (violence & dfs)
xampp安装包含的组件有(php,perl,apche,mysql)
Sum of four squares, laser bombs
How to automatically renew the token after it expires?
快解析结合友加畅捷U+
Oracle 数据库用户创建、重启、导入导出
物联网应用发展趋势
编译型与解释型编程语言的区别
【HMS core】【Media】【视频编辑服务】 在线素材无法展示,一直Loading状态或是网络异常
第十六章 源代码文件 REST API 教程(一)
没有Project Facets的解决方法
FRED应用:毛细管电泳系统
Problem solving-->Online OJ (18)
leetcode:259. 较小的三数之和
JCMsuite Application: Oblique Plane Wave Propagation Transmission Through Aperture