目前正在使用x86处理器开发结构化计算机组织的类项目。 我访问的值是一个1字节的字符,但我不知道如何将其与大写字母进行比较。 他们说使用hex格式的ASCII表,但我不知道如何比较这两个。 void changeCase (char char_array[], int array_size ) { __asm{ // BEGIN YOUR CODE HERE mov eax, char_array; //eax is base image mov edi, 0; readArray: cmp edi, array_size; jge exit; mov ebx, edi; //using ebx as offset shl ebx, 2; mov cl, [eax + ebx]; //using ecx to be the storage register […]
好的,所以我对组装很新,事实上,我对assembly很陌生。 我写了一段代码,只是简单地把用户的数字input,乘以10,并通过程序退出状态(通过在terminal键入echo $?)将结果expression给用户。问题是,它是没有给出正确的数字,4×10显示为144.那么我认为input可能会作为一个字符,而不是一个整数。 我的问题在于,如何将字符input转换为整数,以便在算术计算中使用? 如果有人能够回答记住我是初学者,这将是非常好的:)另外,如何将所述整数转换回字符? section .data section .bss input resb 4 section .text global _start _start: mov eax, 3 mov ebx, 0 mov ecx, input mov edx, 4 int 0x80 mov ebx, 10 imul ebx, ecx mov eax, 1 int 0x80
我已经阅读了各种优化指南,声称ADD 1比在x86中使用INC更快。 这是真的吗?
我有一个简单的Windows窗体(C#,.NET 2.0)应用程序,使用Visual Studio 2008构build。 我想支持多种UI语言,并使用表单的“Localizable”属性和特定于文化的.resx文件,本地化方面可以无缝,轻松地工作。 Visual Studio自动编译特定于文化的resx文件到附属程序集,所以在我编译的应用程序文件夹中有特定文化的子文件夹包含这些附属程序集。 我希望将应用程序部署(复制到位)作为一个单一的程序集 ,但仍然保留包含多组文化特定资源的能力。 使用ILMerge (或ILRepack ),我可以将附件程序集合到主要的可执行程序集中,但标准的.NET ResourceManager回退机制找不到编译到主程序集中的区域性资源。 有趣的是,如果我把我的合并(可执行)程序集,并将其复制到文化特定的子文件夹,然后一切正常! 同样,当我使用Reflector (或ILSpy )时,我可以看到合并组合中主要和文化特定的资源。 但是将主要程序集复制到特定于文化的子文件夹中,无论如何都会破坏合并的目的 – 我真的需要那里只有单个程序集的单个副本… 我想知道是否有任何方法来劫持或影响ResourceManager后备机制在相同的程序集中查找文化特定的资源,而不是在GAC和文化命名的子文件夹中查找 。 我看到以下文章中描述的回退机制,但不知道如何修改: BCL团队博客文章ResourceManager 。 有没有人有任何想法? 这似乎是一个相对频繁的在线问题(例如,另一个关于堆栈溢出的问题:“ ILMerge和本地化的资源集合 ”),但我还没有find任何权威的答案。 更新1:基本解决scheme 遵循casperOne的build议 ,我终于能够完成这项工作。 我把解决scheme的代码放在这里,因为casperOne提供了唯一的答案,我不想自己添加。 我可以通过从“InternalGetResourceSet”方法中实现的Framework资源寻找回退机制中取出内容,并使我们的相同程序集search所使用的第一个机制,从而得以实现。 如果在当前程序集中找不到资源,那么我们调用基本方法来启动默认的search机制(感谢下面的@ Wouter的注释)。 为此,我派生了“ComponentResourceManager”类,并重写了一个方法(并重新实现了一个私有的框架方法): class SingleAssemblyComponentResourceManager : System.ComponentModel.ComponentResourceManager { private Type _contextTypeInfo; private CultureInfo _neutralResourcesCulture; public SingleAssemblyComponentResourceManager(Type t) : base(t) { _contextTypeInfo […]
我的项目是这样设置的: 项目“定义” 项目实施” “消费者”项目 项目“消费者”引用“定义”和“实施”,但不会在“实施”中静态引用任何types。 当应用程序启动时,Project“Consumer”在“Definition”中调用静态方法,需要在“Implementation”中findtypes, 有没有办法强迫任何引用的程序集加载到应用程序域而不知道path或名称,最好是不必使用一个完整的IOC框架?
如果您创build一个使用其他程序集的类库,是否可以将这些其他程序集embedded到类库中作为某种资源? 即,而不是让MyAssembly.dll , SomeAssembly1.dll和SomeAssembly2.dll坐在文件系统上,这些其他两个文件捆绑到MyAssembly.dll ,并在其代码中可用。 我也有点困惑,为什么.NET程序集是.dll文件。 .NET之前没有这种格式? 是所有的.NET程序集DLL,但不是所有的DLL都是.NET程序集? 为什么他们使用相同的文件格式和/或文件扩展名?
我一直在考虑如何保护我的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吗?
我在Visual Studio 2008上testing了一些代码,并注意到了security_cookie 。 我可以理解它的意义,但我不明白这个指令的目的是什么。 rep ret /* REP to avoid AMD branch prediction penalty */ 当然我可以理解评论:)但是这个前缀exaclty和ret上下文是什么关系?如果ecx是!= 0会发生什么? 显然ecx的循环计数在debugging的时候会被忽略,这是可以预料的。 我发现这里的代码是在这里(由编译器注入安全): void __declspec(naked) __fastcall __security_check_cookie(UINT_PTR cookie) { /* x86 version written in asm to preserve all regs */ __asm { cmp ecx, __security_cookie jne failure rep ret /* REP to avoid AMD branch prediction penalty */ […]
我在看MSDN文档,我仍然有点困惑什么是加载程序集时使用LoadFile和LoadFrom之间的区别。 有人可以提供一个例子或比喻来更好地描述它。 MSDN文档更让我困惑。 此外, ReflectionOnlyLoadFrom与LoadFrom相同,只是它仅在reflection模式下加载程序集。 由于我的.NET经验并不是最大的,所以下面是关于使用LoadFile的MSDN文档的一些问题: 1)什么是由LoadFile检查具有相同的身份,但位于不同的path的程序集? 什么是身份(例子)? 2)它声明LoadFile不会将文件加载到“LoadFrom Context”中,也不会使用加载path来parsing依赖关系。 这是什么意思,有人能提供一个例子吗? 3)最后,它声明LoadFile在这个有限的场景中很有用,因为LoadFrom不能加载具有相同身份但不同path的程序集; 它只会加载第一个这样的程序集,这再次引起我同样的问题,程序集标识是什么?
我正在寻找一个C程序的反编译器。 该二进制文件是一个32位x86 Linux可执行文件。 Objdump工作正常,所以基本上我正在寻找一些尝试从asm源重构C源的东西。