我一直在考虑如何保护我的C / C ++代码免受反汇编和逆向工程的影响。 通常我不会在我的代码中自己宽恕这种行为; 然而,为了各种人的安全,我一直在研究的当前协议不能被检查或理解。 现在这对我来说是一个新的课题,互联网对于防止逆向工程来说并不是真正的资源,而是描绘了大量关于如何进行逆向工程的信息 我到目前为止想到的一些事情是: 代码注入(在实际函数调用之前和之后调用虚函数) 代码混淆(篡改二进制的反汇编) 写我自己的启动程序(难以绑定到debugging器) void startup(); int _start() { startup( ); exit (0) } void startup() { /* code here */ } 运行时检查debugging器(如果检测到则强制退出) function蹦床 void trampoline(void (*fnptr)(), bool ping = false) { if(ping) fnptr(); else trampoline(fnptr, true); } 毫无意义的分配和释放(堆栈更改很多) 毫无意义的虚拟呼叫和蹦床(拆卸输出中跳跃的吨数) 铸造吨(混淆拆卸) 我的意思是这些是我想到的一些东西,但是它们都可以被解决,或者在正确的时间框架内被代码分析师弄清楚。 还有别的select吗?
我想为SO编写一个小小的教育工具,帮助初学者(和中级)程序员认识并挑战他们在C,C ++及其平台上的无理假设。 例子: “整数环绕” “每个人都有ASCII” “我可以将函数指针存储在void *中 我认为可以在各种平台上运行一个小型的testing程序,这个程序运行“合理”的假设,即从我们的经验来看,通常是由许多缺乏经验/半经验的主stream开发人员制作的,并logging他们在不同机器上打破的方式。 这样做的目的并不是要certificate做某件事是“安全的”(这是不可能的事,testing只有在事件发生的时候才能certificate),而是要向最不能理解的人展示最不显眼的expression如果它有未定义的或实现定义的行为,则在不同的机器上中断。 。 为了达到这个目的,我想问你: 这个想法如何改进? 哪些testing是好的,他们应该是什么样子? 你会在可以接触到的平台上运行testing并发布结果,以便我们得到平台数据库,它们有何不同以及为什么允许这种差异? 以下是testing玩具的当前版本: #include <stdio.h> #include <limits.h> #include <stdlib.h> #include <stddef.h> int count=0; int total=0; void expect(const char *info, const char *expr) { printf("..%s\n but '%s' is false.\n",info,expr); fflush(stdout); count++; } #define EXPECT(INFO,EXPR) if (total++,!(EXPR)) expect(INFO,#EXPR) /* stack check..How can I do this […]
我已阅读GCC的代码生成约定的选项 ,但不明白什么“生成位置无关的代码(PIC)”。 请举个例子来解释我是什么意思。
接口的原因真的没有了我。 从我所了解的情况来看,这对C#中不存在的多重inheritance是一种解决方法(或者我被告知)。 我所看到的是,你预先定义了一些成员和职能,然后再次在class上重新定义。 从而使接口变得冗余。 它只是感觉像句法…好吧,对我来说垃圾(请不要冒犯意味着垃圾在无用的东西)。 在下面的例子中,我从堆栈溢出中的不同的C#接口线程中获得了一个名为Pizza的基类,而不是一个接口。 简单的例子(取自不同的堆栈溢出贡献) public interface IPizza { public void Order(); } public class PepperoniPizza : IPizza { public void Order() { //Order Pepperoni pizza } } public class HawaiiPizza : IPizza { public void Order() { //Order HawaiiPizza } }
我是一个近期的AIgradle生(大约2年),为一个适度的运作。 它已经落在了我的头上(主要是因为我是该部门的第一个“采用者”)来创build一个基本的(读取有用的)C#编码标准文档。 我想我应该解释一下,我可能是最初级的软件工程师,但是我期待着这个任务,希望我能够生产出一半可用的东西。 我已经做了相当广泛的互联网search,并阅读关于什么编码标准文件应该/不应该包含的文章。 这似乎是一个很好的地方,任何要求一些build议。 我意识到,我正潜在地打开一扇关于“做事的最佳方式”的整个世界的不同意见。 我都理解和尊重每个程序员都有解决每个任务的首选方法这个不可否认的事实,因此我不想写任何如此严格的规范性的东西来扼杀个人的天赋,而是试图获得一般的方法论,并且同意标准(例如命名约定)来帮助使个人代码更具可读性。 所以这里去….任何build议? 任何呢?
我在我的项目中有ApplicationUser属性的Author名称的实体。 我如何获得当前logging的ApplicationUser完整对象。 在创build新的文章时,我必须将Article Author属性设置为当前的ApplicationUser 。 在旧的成员资格机制很简单,但在新的身份authentication方法,我不知道如何做到这一点。 我试图这样做: 添加使用语句的身份扩展: using Microsoft.AspNet.Identity; 然后我尝试获取当前用户: ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == User.Identity.GetUserId()); 但我得到例外: LINQ to Entities不识别方法System.String GetUserId(System.Security.Principal.IIdentity)方法,并且此方法不能被转换成存储expression式。 来源=的EntityFramework
假设我有2个标准向量: vector<int> a; vector<int> b; 我们还要说,这两者都有大约30个元素。 如何将向量b添加到向量a的末尾? 肮脏的方式将通过b迭代,并通过vector<int>::push_back()添加每个元素,但我不想这样做!
我正在寻找具有常见的可重用数据结构,如链接列表,哈希表等的C库。类似于由Kyle Loudon用C(平装书)进行Mastering Algorithms分发的源代码。
我在做C#XML序列化时遇到了一些问题,我想分享一下: 您不能序列化只读的项目(如KeyValuePairs) 您不能序列化通用字典。 相反,尝试这个包装类(从http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx ): using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; [XmlRoot("dictionary")] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable { public System.Xml.Schema.XmlSchema GetSchema() { return null; } public void ReadXml(System.Xml.XmlReader reader) { XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); bool wasEmpty = reader.IsEmptyElement; reader.Read(); if (wasEmpty) return; while (reader.NodeType […]
我特别想到如何使用C#或Java等语言来显示分页控件。 如果我有x个项目,我想每个页面以y块显示,那么需要多less页面?