我有一个二进制'api.dll',它使用另一个二进制'helper.dll'.我想使用数字签名验证每个DLL的真实性,但我不确定正确的方法.对于上下文,DLL使用visual studio 2010构建,并通过依赖项选项卡进行链接.链接通过存根helper.lib发生,所以我没有显式调用LoadLibraryapi.dll代码.部分问题是我不知道从哪里加载helper.dll.我最初的想法是:
这是解决这个问题的最好方法吗?
其次,基于我对数字签名/证书的模糊理解,在我看来验证需要连接到证书颁发机构,或者证书需要已经在机器上列为可信任.当外部连接被不赞成或明确禁止时,通常如何处理?是应用程序"安装"的东西吗?或者在这种情况下是否需要另一种不太安全的验证方法?
我正在使用引导程序,并尝试在各种元素上获得正确的类,以便在各种设备上进行适当的布局。似乎对很多人来说,我想要类似的东西control-label col-md-2。所以我可以通过几十个元素,并改变它们,但是 - 如果我意识到我真的想要col-md-9怎么办?然后我必须遍历每个元素并更改类!所以我想做的是:
<label class="label-class"/>
和
.label-class {
control-label col-md-9
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?我在网上找到的关于组合课程的每个答案都与不同类型的问题有关。或者,如果我把这一切都弄错了,我愿意学习一种更好的方法来测试各种布局:)
编辑: 经过更多搜索,我发现CSS 类可以继承一个或多个其他类吗?- 可悲的是,似乎答案是“并非没有额外的实用程序”。
所以我一直在一个组织工作,这对开发人员施加了相当大的压力来编写和维护单元测试.虽然这不是我过去做过的很多事情,但我喜欢这个想法,并且相信任何认真的项目都应该有一定程度的单元测试,特别是对于那些适合这种测试的自我容器类库.
但是,我还发现曾经非常简单,可读的代码被制成了一个怪异的工厂和接口.在最简单的情况下,服务包装器:
没有单元测试
class ShazamService
{
private string url;
public ShazamService(string url) { this.url = url; }
string IdentifySong(byte [] mp3Data)
{
return HttpHelper.Upload(url, mp3Data).Response;
}
}
class Program
{
public static int Main(string [] args)
{
var svc = new ShazamService("http://www.shazam.com");
Console.Writeline(svc.IdentifySong(args[0].ToByteArray());
}
}
Run Code Online (Sandbox Code Playgroud)
单元可测试版本
public interface IShazamService
{
public string IdentifySong(byte [] mp3Data);
}
public class ShazamClassFactory
{
private string url;
public ShazamClassFactory(string url) { this.url = url; }
public IShazamService GetInstance(bool test)
{
if (test)
{
return …Run Code Online (Sandbox Code Playgroud) 由于异步函数的返回站点不是调用者,我认为这是有效的,但我认为为了以防万一我会验证这是安全的.如果不是,为什么会溢出堆栈?
static async Task CheckAsync(TimeSpan recursiveTimer)
{
// do some work
await Task.Delay(recursiveTimer);
CheckAsync(recursiveTimer);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我决定尝试一下 - 看起来它不会溢出堆栈(它现在在我的机器上运行 - 它当前正在调用210,000).我假设的原因是因为CheckAsync函数的返回站点实际上不是CheckAsync,而是异步管道中的某个地方.因此,当CheckAsync调用CheckAsync时,它实际上并没有通过普通函数调用机制添加到调用堆栈,而是将该函数作为对象放在某个异步"待执行"队列上,该队列通过管理异步函数的其他线程运行.
对于那些了解这种机制的人来说:这听起来是对的吗?
简单的例子:
public class Food
{
public virtual void Eat()
{
StuffInMouth();
}
}
public class Fruit : Food
{
// Nothing here yet, but likely could be in the future
// Is this bad from a .NET/C# style guidelines perspective?
}
public class Apple : Fruit
{
public virtual void Eat()
{
Clean();
base.Eat();
}
}
public class Orange : Fruit
{
public virtual void Eat()
{
Peel();
base.Eat();
}
}
Run Code Online (Sandbox Code Playgroud) 我想做类似的事情:
<td contenteditable=true @onblur(async (txt) => { ... })>
Run Code Online (Sandbox Code Playgroud)
但目前它似乎只@onchange受支持,并且在contenteditable内容更改时实际上不会触发。我想该方法是有一个调用 C# 处理程序的 JS 处理程序,但我不知道通信是否可以这样进行。现在最好的选择是拥有一个带有onclick“保存到数据库”处理程序的按钮吗?或者有更好的选择吗?
所以我的全局“user.email”为“myPersonalEmail@gmail.com”。但我还有一个文件夹来保存我的工作项目,组织方式如下:
repos/
workRepos/
databaseMonitor/
salesWebapp/
sudokuSolver/
someCoolGame/
Run Code Online (Sandbox Code Playgroud)
我知道我可以将每个子存储库上的本地 user.email 设置workRepos/为“rollie@companyname.com”,但我宁愿将其直接设置在内部workRepos/,以便下面的所有项目将我的电子邮件解析为公司电子邮件,但我不这样做不要意外地提交带有错误身份的内容。
我犹豫是否要在 中初始化 git 存储库,因为某些工具会向我显示该workRepos/存储库的内容,而不是我正在处理的内容。看起来 git 会有一些东西,允许像在存储库之上找到任何人时使用的文件一样,来覆盖全局设置。.git.settings
从推荐的类似问题中,我看到可以在全局 git 配置文件中提供一些配置,这可以工作,但我不喜欢让它变得复杂,而且如果我将存储库移动到新位置,一切都会中断,所以这并不理想,但可能是我会做的。
是这样吗?关于做我想做的事有什么建议吗?或者我是否像某种尼安德特人一样在每个存储库的基础上指定这一点?
简单地说,我想要一个像这样的函数:
fun <T> convert(val foo: String, fooT: KType) : T {
...?
}
Run Code Online (Sandbox Code Playgroud)
对于Int,它会返回foo.toInt(),对于Double,foo.toDouble(),并且对于某些未知类型,只是抛出异常。我认为为我期望的类型创建自己的 switch 语句并不难,但出于好奇 - 已经有办法了吗?
我有一个服务侦听“https://myapp.a.run.app/dosomething”,但我想利用 Cloud Run 的可扩展性功能,因此在“dosomething”的控制器中,我向“发送了 10 个请求” https://myapp.a.run.app/smalltask'; 我的应用程序配置为允许每个实例只处理一个请求,我希望有 10 个实例启动,所有实例都执行它们的小任务,然后返回(都在超时期限内)。
但我不知道如何正确验证请求,所以这 10 个请求都导致 403。对于 Cloud Run 服务,我会在初始请求中手动传递不记名令牌,但我希望在某个时候添加一些 api 代理。但是没有上述 API 代理,发送请求以使其被接受的正确方法是什么?该应用程序以有权访问端点的用户身份运行。
给定一个函数,如:
do_something_big():
do_1()
do_2()
do_3()
Run Code Online (Sandbox Code Playgroud)
这很容易得到它需要运行任何时间do_something_big()或单个实例do_1()。但假设我有:
for _ in range(100000):
do_something_big()
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来获得 100,000do_1需要多长时间?这并不难 - 您只需为每个人计时并更新一些全局状态以跟踪总时间。但是是否已经构建了一个实用程序来为我抽象它?
我有一个MFC对话框应用程序,它处理PreTranslateMessage中的某些消息.我感兴趣的其中一个是Ctrl + R. 但是,当我单击另一个窗口(visual studio 2010中的代码编辑器,nodepad ++等)并使用Ctrl + C(或Ctrl + X)复制一些文本时,我收到此消息.请注意,使用Ctrl + V似乎不会发生这种情况,并且可以使用GetKeyState和GetASyncKeyState重现.这种行为非常混乱!要重现,在Visual Studio 10中创建一个基本的MFC对话框,添加pretranslate为:
BOOL CPreTranslateTestDlg::PreTranslateMessage(MSG *pMsg)
{
if (GetKeyState(VK_CONTROL) & 0x8000 && pMsg->wParam == 'R')
{
return true;
}
return CDialogEx::PreTranslateMessage(pMsg);
}
Run Code Online (Sandbox Code Playgroud)
打开断点return true;,启动对话框.然后转到Visual Studio代码窗口,然后按Ctrl + C一些文本; 你的断点会被击中.
有关为什么会发生这种情况的任何想法?
我的理解是,暴露std::string跨越DLL边界获取或返回stl容器(例如)的函数可能会导致问题,因为2个二进制文件中这些容器的STL实现存在差异.但是导出类这样的类是否安全:
class Customer
{
public:
wchar_t * getName() const;
private:
wstring mName;
};
Run Code Online (Sandbox Code Playgroud)
如果没有某种破解,mName将无法被可执行文件使用,因此它无法在mName上执行方法,也无法构造/破坏此对象.
我的直觉是"不要这样做,这是不安全的",但我无法找出一个很好的理由.
例如:
#include <iostream>
#include <cstring>
using namespace std;
struct Square
{
Square()
{
str = new char[10];
strcpy(str, "Hello");
}
~Square()
{
delete str;
}
void print()
{
cout << "str = '" << str << "'" << endl;
}
char * str;
};
class foo
{
public:
typedef const Square & sqcref;
typedef Square & sqref;
foo(sqref && _ref)
{
fooStr = _ref.str;
_ref.str = 0;
}
char * fooStr;
};
int main()
{
Square s;
s.print();
foo f(s); …Run Code Online (Sandbox Code Playgroud) c# ×4
c++ ×4
winapi ×2
.net ×1
asp.net-core ×1
asynchronous ×1
blazor ×1
css ×1
dll ×1
git ×1
html ×1
kotlin ×1
mfc ×1
python ×1
python-3.x ×1
refactoring ×1
unit-testing ×1