根据我在嵌入式计算方面的经验,我所拥有的每一个迹象都表明,做这样的事情需要昂贵的设备来访问平台(ICE调试器,JTAG探针,I2C程序员等等),但我总是想知道是否一些雄心勃勃的黑客已经找到了在Blackberry设备上加载本机代码的方法.任何人?
编辑:我知道已发布的SDK及其附带限制.我很好奇是否有人试图绕过他们,如果有的话,他们到底有多远.
新问题:
使用Microsoft .NET框架编写的程序是否编译/执行本机代码?
我不是说如果有办法不在机器上安装.net框架.简单地说:.net应用程序是否运行在另一层,如Java(即字节码).
我正在尝试使用Android NDK在我的Android应用程序中嵌入openssl库,但我不知道如何使用该库,所以请任何人都可以告诉我如何使用它请发送源代码供我参考... ....
相关:
我正在报告从本机系统API收集的一些信息.(我知道这很糟糕......但是我得到的信息是我无法得到的,而且如果/当这个时间到来时我不得不更新我的应用程序.)
本机API返回本地路径名,所看到的ob,即\SystemRoot\System32\Ntoskrnl.exe,或\??\C:\Program Files\VMWare Workstation\vstor-ws60.sys.
我可以替换常见的前缀,即
std::wstring NtPathToWin32Path( std::wstring ntPath )
{
if (boost::starts_with(ntPath, L"\\\\?\\"))
{
ntPath.erase(ntPath.begin(), ntPath.begin() + 4);
return ntPath;
}
if (boost::starts_with(ntPath, L"\\??\\"))
{
ntPath.erase(ntPath.begin(), ntPath.begin() + 4);
}
if (boost::starts_with(ntPath, L"\\"))
{
ntPath.erase(ntPath.begin(), ntPath.begin() + 1);
}
if (boost::istarts_with(ntPath, L"globalroot\\"))
{
ntPath.erase(ntPath.begin(), ntPath.begin() + 11);
}
if (boost::istarts_with(ntPath, L"systemroot"))
{
ntPath.replace(ntPath.begin(), ntPath.begin() + 10, GetWindowsPath());
}
if (boost::istarts_with(ntPath, L"windows"))
{
ntPath.replace(ntPath.begin(), ntPath.begin() + 7, GetWindowsPath());
}
return ntPath;
}
TEST(Win32Path, NtPathDoubleQuestions) …Run Code Online (Sandbox Code Playgroud) 我的目标: 我想获得IDWriteTextFormat字体的高度,这样我就可以计算出在一定高度的IDWriteTextLayout中可以容纳多少行文本.
我的问题: 现在我正在使用此代码来计算可见的行数:
inline int kmTextCtrl::GetVisLines() const
{
/* pTextFormat is an IDWriteTextFormat pointer, dpi_y is the desktop's vertical dpi,
and GetHeight() returns the height (in pixels) of the render target. */
float size = (pTextFormat->GetFontSize()/72.0f)*dpi_y;
return (int)(GetHeight()/size);
}
Run Code Online (Sandbox Code Playgroud)
对于某些字体,计算似乎是准确的,但对于任何TrueType字体都不准确(例如:Courier New,Arial,Times New Roman).对于这些字体,显示的文本剪裁得远远低于渲染目标的下垂直边界.
一些上下文: 我正在制作一个文本回滚缓冲区控件,它使用IDWriteTextLayout将文本放到控件的渲染目标中.我使用GetVisLines()的结果来确定循环缓冲区(由行存储std :: strings中的文本)中的文本行数以拉入布局,并在每次滚动或调整窗口大小时重新创建它.
这是使用"本机"Win32 API C++完成的.
可能重复:
从非托管代码调用托管.NET代码的最佳方法
我很想知道我是否可以使用C#作为c ++本机应用程序中托管的脚本语言.我已经在自己的游戏引擎上工作了5年,但我从来没有触及它的脚本方面.我喜欢在Unity中如何为游戏中的不同对象编写C#脚本.
我做了一些搜索,但我找不到任何实际用途.
请注意,我的问题与.Net无关,而与C#作为通用语言有关.
为了确保,我将说明:我不想从C#调用本机c ++.我反过来想要它.
如果有人能指出我的一些资源,我会很感激.
我们有一个在MFC(VS2010)中通过CDatabase/CRecordset使用ODBC的应用程序.我们实施了两个后端.MSSQL和MySQL.
现在,当我们使用MSSQL(使用Native Client 10.0)时,使用SELECT检索记录通过慢速链接(例如VPN)非常慢.MySQL ODBC驱动程序没有表现出这种令人讨厌的行为.
例如:
CRecordset r(&m_db);
r.Open(CRecordset::snapshot, L"SELECT a.something, b.sthelse FROM TableA AS a LEFT JOIN TableB AS b ON a.ID=b.Ref");
r.MoveFirst();
while(!r.IsEOF())
{
// Retrieve
CString strData;
crs.GetFieldValue(L"a.something", strData);
crs.MoveNext();
}
Run Code Online (Sandbox Code Playgroud)
现在,使用MySQL驱动程序,一切都按预期运行.返回查询,一切都闪电般快.但是,使用MSSQL Native Client,事情会变慢,因为在每个MoveNext()上,驱动程序都与服务器通信.
我认为这是由于服务器端游标,但我没有找到一种方法来禁用它们.我尝试过使用:
::SQLSetConnectAttr(m_db.m_hdbc, SQL_ATTR_ODBC_CURSORS, SQL_CUR_USE_ODBC, SQL_IS_INTEGER);
Run Code Online (Sandbox Code Playgroud)
但这也没有帮助.在SQL事件探查器中,sp_cursorfetch()等仍有长期运行的exec.我还尝试了一个带有SQLAPI和批量提取的小型参考项目,但是在FetchNext()中也会挂起很长时间(即使结果集中只有一条记录).但这只发生在使用LEFT JOINS,表值函数等的查询上. 请注意,查询不会花费那么长时间 - 通过SQL Studio在相同的连接上执行相同的SQL会在合理的时间内返回.
问题1:是否有可能以某种方式获取本机客户端 在本地"缓存"所有结果 使用本地游标的方式与MySQL驱动程序似乎一样吗?
也许这是完全错误的做法,但我不确定如何做到这一点.
我们想要的只是从SELECT中一次检索所有数据,然后再不谈论服务器直到下一个查询.我们不关心记录集更新,删除等或任何废话.我们只想检索数据.我们采用该记录集,获取所有数据并删除它.
问题2:有没有更有效的方法来使用ODBC在MFC中检索数据?
我想为iOS应用程序创建一些想法,但我没有Mac机器.(我的机器也配有AMD处理器,这使得设置vm成为一个问题,我无法解决)
因此,我唯一的选择(除了获得Mac)是在云中租用Mac机器(macincloud是我的目标).
我想调试在iPad上运行的应用程序(本机,而不是网络),我已经连接到我的本地Win7机器.
有没有办法启用/共享我的USB到远程Mac,以便Xcode可以检测我的设备并允许调试应用程序?
这个问题是对“ 在本机应用程序和网站之间共享凭据 ”的补充,因为我们的目标是在相反的方向上共享秘密。
TL; TR:我们如何安全地从Web浏览器应用程序向Native Desktop应用程序共享用户的身份验证/授权状态,因此同一用户不必在Native应用程序中另外进行身份验证?
TS; WM:我们正在研究以下架构:Web应用程序(在用户选择的Web浏览器中运行一些HTML前端UI),本机桌面应用程序(实现自定义协议处理程序),Web API和OAuth2服务,如图所示。

最初,使用授权代码授予流程针对OAuth2服务在Web浏览器应用程序中对用户进行身份验证/授权。
然后,当用户单击我们的基于协议的自定义超链接时,Web浏览器内容可以与本机应用程序进行单向对话。基本上,已经完成了通过Web API在两者之间建立安全的双向后端通信通道的工作。
我们认为,在对通过自定义协议链接从Web浏览器应用程序收到的任何请求采取行动之前,本机应用程序应首先对用户进行身份验证(使用该特定的桌面会话该用户应该是同一个人)。我们认为本机应用程序还应该使用授权码流(带有PKCE)来获取Web API的访问令牌。然后,它应该能够使用相同的Web API安全地验证自定义协议数据的来源和完整性。
但是,对于用户来说,必须两次进行身份验证可能是一个障碍,第一次是在Web浏览器中,第二次是在Native应用程序中,两者同时运行。
因此,存在一个问题:是否有一种方法可以在不损害此体系结构的客户端安全性的情况下,将OAuth2访问令牌(或任何其他授权承载)从Web浏览器应用安全地传递到本机应用?也就是说,Native应用程序可以使用Web浏览器中的身份调用Web API,而不必先验证同一用户?
就个人而言,我看不到如何安全地避免其他身份验证流程。默认情况下,通过自定义应用程序协议进行的通信是不安全的,因为通常这只是调用本机应用程序的命令行参数。与TLS通道不同,它可以被拦截,模拟等。我们可以对自定义协议数据进行加密。尽管如此,无论对本机应用程序进行什么调用来解密(无论是对客户端OS API还是对Web API的一些不受保护的调用),都必须执行,恶意的actor /恶意软件也可能会复制它们。
我想念什么吗?是否有特定于平台的安全解决方案?本机桌面应用程序是Electron应用程序,旨在跨平台。我们的大多数用户都将使用任何受支持的浏览器(甚至包括IE11)在Windows上运行此程序,但是毫无疑问ActiveX或入侵正在运行的Web浏览器实例。
native ×10
c++ ×3
windows ×2
.net ×1
android ×1
android-ndk ×1
blackberry ×1
c# ×1
client ×1
direct2d ×1
directwrite ×1
ios ×1
nt ×1
oauth-2.0 ×1
openssl ×1
performance ×1
ruby ×1
rvm ×1
security ×1
sql ×1
sql-server ×1
winapi ×1