假设这是我的程序simpleCsharp.exe:
namespace simpleCsharp
{
public class Program
{
public static int Main(string[] args)
{
uint x = 0xFEFEFE;
uint y = 0xEEEEEE;
uint z;
uint[] list = { 0, 1, 2, 4, 8 };
uint[] array = { 0xA, 0xB, 0xC, 0xD };
z = x + y + list[2] + array[1];
z = z - (y << 1);
return 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在Debug的Disassembly窗口中查看一个简单的C#程序的反汇编,那么本机代码输出至少是有意义的.例如,这是Debug的反汇编,其中包含Optimization:
uint x = 0xFEFEFE;
00000000 push ebp
00000001 mov ebp,esp
00000003 sub esp,28h …Run Code Online (Sandbox Code Playgroud) 它看起来不像是用JavaScript编写的.
如果你输入_now控制台,你只能得到
function now() { [native code] }
Run Code Online (Sandbox Code Playgroud)
当你试图查看一些内部工作对浏览器不可见的内置方法时,通常只能得到它.
setTimeout
=>function setTimeout() { [native code] }
Run Code Online (Sandbox Code Playgroud)
已_.now完成与JavaScript引擎的"原生代码"的东西吗?
在某些Windows安装中,我们突然遇到了智能卡api的问题。调用SCardEstablishContext函数时似乎有内存泄漏。可以在控制台应用程序中重现该问题,其代码示例位于 http://www.pinvoke.net/default.aspx/winscard.scard建立上下文
class Program
{
#region Win32
// WinSCard APIs to be imported.
[DllImport("WinScard.dll")]
static extern int SCardEstablishContext(uint dwScope,
IntPtr notUsed1,
IntPtr notUsed2,
out IntPtr phContext);
[DllImport("WinScard.dll")]
static extern int SCardReleaseContext(IntPtr phContext);
[DllImport("WinScard.dll")]
static extern int SCardConnect(IntPtr hContext,
string cReaderName,
uint dwShareMode,
uint dwPrefProtocol,
ref IntPtr phCard,
ref IntPtr ActiveProtocol);
[DllImport("WinScard.dll")]
static extern int SCardDisconnect(IntPtr hCard, int Disposition);
[DllImport("WinScard.dll", EntryPoint = "SCardListReadersA", CharSet = CharSet.Ansi)]
static extern int SCardListReaders(
IntPtr hContext,
byte[] mszGroups,
byte[] mszReaders,
ref UInt32 pcchReaders);
#endregion
static …Run Code Online (Sandbox Code Playgroud) 我使用 Microsoft Visual Studio 2012,我想用本机 C++ 编写一个应用程序。我不想使用托管代码 (.NET) 的原因是因为我不希望我的应用程序使用 .NET Reflector 之类的工具反编译回源代码,但如果我仍然可以使用,那就太好了我的应用程序中的 UI(CLR Windows 窗体)。
但是当我将 UI(CLR Windows 窗体)添加到我的 Win32 项目时,会弹出此消息:

这是否意味着从现在开始我的所有项目都不会被编译为本机代码,并且有可能使用 .NET Reflector 之类的工具反编译整个应用程序?
或者它将是“混合”(本机代码 + 托管代码)项目蚂蚁将无法使用诸如 .NET 反射器之类的工具反编译整个应用程序,只有其中负责 UI 的部分?
PS 是的,我知道任何应用程序都可以反编译 (!!!),但我问的是基于 .NET 的应用程序的反编译工具。使用 .NET Reflector,您可以从 .NET 应用程序“取回原始源代码”。所以我的问题是,是否有可能从这个应用程序“取回原始源代码”,或者它会以某种方式“混合”代码(托管 + 本机),并且不可能将它反编译回原始代码像.NET Reflector这样的工具的源代码?
哪种语言(C或C++)最适合编写本机库并使用不同语言使用语言绑定(例如,使用JNI或Ruby的C扩展),为什么?
我一直在大量研究JS混淆,开始了解所有高级概念,但我最近发现了一个混淆代码,我相信它是某种形式的"原生Javascript代码",我只是找不到任何关于这种混淆:
这是一个小提取物:
'\141\75\160\162\157\155\160\164\50\47\105\156\164\162\145\172\40'
Run Code Online (Sandbox Code Playgroud)
它被称为这样:
eval(eval('\141\75\160\162\157\155\160\164\50\47\105\156\164\162\145\172\40'))
Run Code Online (Sandbox Code Playgroud)
由于代码是另一个的工作,我在JS挑战中遇到了它我没有发布完整的代码,所以我给出的例子不起作用,但完整的代码确实有效.
所以这是我的问题:
这是什么类型的代码?我在哪里可以了解更多相关信息?
任何建议赞赏:)
我创建了我的第一个NDK项目,在屏幕上显示一些文本.我在java中的类NativeLib中使用本机方法,并在C中的类中实现.但我收到错误基本操作数' - >'具有非指针类型'JNIEnv {aka _JNIEnv}
#include <jni.h>
#include <string.h>
#include <stdio.h>
#include <android/log.h>
#define DEBUG_TAG "MY_NDK_DEMO"
JNIEXPORT jstring JNICALL Java_com_example_helloworld_NativeLib_helloWorld
(JNIEnv * env, jobject obj) {
return (*env)->NewStringUTF("Hello World JNI!");
}
Run Code Online (Sandbox Code Playgroud) 在名为db_to_var.jsI的 javascript 文件中,有以下函数成功地将查询返回的数组打印到数据库test_db,到console.log(). (例如,一个名为的数据库cars有一个name描述品牌名称的关键字,例如toyota, hyunday,volvo。)。该方法使用:调用console.log("listCars function call="+listCars());并包含:
function listCars() {
car_and_name_grandparent = MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("testdb");
car_and_name_parent = dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray(function(err, result) {
if (err) throw err;
car_and_name = result;
db.close();
console.log("car_and_name="+car_and_name);
return car_and_name;
});
return car_and_name_parent;
});
return car_and_name_grandparent;
};
Run Code Online (Sandbox Code Playgroud)
但是,car_and_name_parent保持未定义状态,因为car_and_name正确填充的 实际上并未返回到car_and_name_parent。这让我进行了调查,并调查了:
说我有一些我经常使用的东西.例如,大约90%的时间我使用
explode ($delimiter, $string);
Run Code Online (Sandbox Code Playgroud)
通常你会像这样使用它:
$string = "blah/blah/blah";
$e = explode("/", $string);
Run Code Online (Sandbox Code Playgroud)
如果我编写自定义函数,PHP会更快吗?
#reusable
function c4($str) {
return explode("/", $str);
}
$e = c4("blah/blah/blah/");
Run Code Online (Sandbox Code Playgroud)
或者也许当写为匿名函数时?
#reusable
$c4 = function($str) {
return explode("/", $str);
};
$e = $c4("blah/blah/blah");
Run Code Online (Sandbox Code Playgroud)
我不知道如何把这个,但也许这是正确的问题:PHP'缓存'用户函数以供将来使用(在解析时)?如果是这样,当使用相同的参数时,使用本机函数和重用相同自定义函数的断点变得更有效.可能是因为可解析代码的数量较少?
刚阅读StackOverflow的建议:
"We prefer questions that can be answered, not just discussed."
Run Code Online (Sandbox Code Playgroud)
所以我真的希望这不会在讨论中结束.非常好奇地等待你的回复!
我认为本机代码是专为在特定计算机上运行而设计的代码.令我困惑的是,如何在其他平台和机器上运行C/C++?我唯一能想到的就是他们需要一个完全不同的编译器来将代码编译成特定于机器的代码.当C/C++被称为本机语言时,我感到很困惑.
所以最近我一直在阅读反调试机制和我遇到的流行方法,以检查当前进程是否正在调试OutputDebugString.我已经编写了这段代码,但它没有完全按照预期工作,有人可以解释为什么或我做错了什么?
private static bool stub_OutputDebugString()
{
uint ErrCode = 0x12A6;
Native.SetLastError(ErrCode);
Native.OutputDebugString("System.Core\n");
if (Marshal.GetLastWin32Error() == (int)ErrCode)
{
//Debugger Detected
return true;
}
else
{
//No Debugger Detected
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我的P/Invoke签名
[DllImport("kernel32.dll", SetLastError = true)]
public static extern void SetLastError(uint dwErrCode);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern void OutputDebugString(string lpOutputString);
Run Code Online (Sandbox Code Playgroud)
注意我读了如何GetLastError不应该从本机环境调用,因为值可以更改,所以我正在使用Marshal.GetLastWin32Error()
代码应该工作,但当我尝试使用windbg或任何其他调试器调试应用程序时,最后一个错误不会改变.
我正在考虑编写一个可能使用本机代码的Java应用程序(最有可能用c(++)编写,而不是汇编),我希望看到这样做的优点和缺点.我知道本机代码旨在在特定的机器/机器规格上运行,而不是由JVM运行的代码,JVM当然是虚拟机.如果我理解正确,在其本机运行的本机代码运行速度比字节码快,这是正确的吗?
基本上,如果我正在编写程序,是否值得使用本机代码进行某些计算和一些其他函数来尝试减少所需的时间和处理器的压力?如果我使用本机代码(如果我只有我的系统来编写/测试代码),是否有一种可靠的方法使其适用于几乎所有系统?
native-code ×13
c++ ×4
javascript ×4
c ×3
.net ×2
browser ×2
c# ×2
android ×1
android-ndk ×1
debugging ×1
disassembly ×1
function ×1
java ×1
managed-code ×1
memory-leaks ×1
mongodb ×1
native ×1
obfuscation ×1
php ×1
pinvoke ×1
promise ×1
return-value ×1
smartcard ×1
v8 ×1
web ×1
windbg ×1
winscard ×1