我可以使用PIMAGE_DOS_HEADERAPI(示例)从Windows中的可执行文件中获取导出的函数名称和指针的列表.
什么是Linux的等效API?
对于上下文我正在创建单元测试可执行文件,我正在导出以名称"test_"开头的函数,我希望可执行文件只是在运行时旋转并执行所有测试函数.
示例伪代码:
int main(int argc, char** argv)
{
auto run = new_trun();
auto module = dlopen(NULL);
auto exports = get_exports(module); // <- how do I do this on unix?
for( auto i = 0; i < exports->length; i++)
{
auto export = exports[i];
if(strncmp("test_", export->name, strlen("test_")) == 0)
{
tcase_add(run, export->name, export->func);
}
}
return trun_run(run);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
在使用这个问题的最佳答案之后,我能够找到我的样子: 在C中动态列出所有的功能/符号?
另外,我不得不使用下面的答案中的gnu_hashtab_symbol_count函数Nominal Animal来处理DT_GNU_HASH而不是DT_HASH.
我的最终测试主要功能如下所示:
int main(int argc, …Run Code Online (Sandbox Code Playgroud) 我正在尝试将FxCop直接合并到我的构建中.我正在使用MSBuild社区任务.我有一个像这样的目标文件:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<FxCopToolPath Condition="'$(FxCopToolPath)' == ''">$(MetaSharpLibPath)\FxCop</FxCopToolPath>
<FxCopCustomDictionary Condition="'$(FxCopCustomDictionary)' == ''">$(FxCopTooLPath)\CustomDictionary.xml</FxCopCustomDictionary>
<MSBuildCommunityTasksLib>..\MSBuild.Community.Tasks\MSBuild.Community.Tasks.dll</MSBuildCommunityTasksLib>
</PropertyGroup>
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.FxCop" />
<Target Name="AfterBuild" >
<ItemGroup>
<FxCopRuleAssemblies Include="DesignRules.dll" />
<FxCopRuleAssemblies Include="GlobalizationRules.dll" />
<FxCopRuleAssemblies Include="InteroperabilityRules.dll" />
<FxCopRuleAssemblies Include="MobilityRules.dll" />
<FxCopRuleAssemblies Include="NamingRules.dll" />
<FxCopRuleAssemblies Include="PerformanceRules.dll" />
<FxCopRuleAssemblies Include="PortabilityRules.dll" />
<FxCopRuleAssemblies Include="SecurityRules.dll" />
<FxCopRuleAssemblies Include="SecurityTransparencyRules.dll" />
<FxCopRuleAssemblies Include="UsageRules.dll" />
<FxCopTargetAssembly Include="@(MainAssembly)" />
</ItemGroup>
<FxCop
ToolPath="$(FxCopToolPath)"
CustomDictionary="$(FxCopCustomDictionary)"
RuleLibraries="@(FxCopRuleAssemblies)"
TargetAssemblies="@(FxCopTargetAssembly)"
DependencyDirectories="@(ReferencePath)"
FailOnError="True"
ConsoleXslFileName="$(FxCopToolPath)\Xml\VSConsoleOutput.xsl"
DirectOutputToConsole="true" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
它工作得很好,除了我添加[SuppressMessage]警告时它们仍然显示在我的输出中.我创建了一个.fxcop项目文件并包含输出程序集并尝试以这种方式运行它,但同样的事情发生了.似乎FxCop不尊重我的压抑,任何想法?
这是一个无效的抑制示例(GlobalSuppressions.cs):
[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = …Run Code Online (Sandbox Code Playgroud) 文档定义了endpoint如此:
endpoint(String) - 发送请求的端点URI.默认端点是根据配置构建的
region.端点应该是一个字符串'https://{service}.{region}.amazonaws.com'.
我相信服务名称是StepFunctions,我正在使用该区域us-east-1,因此网址应该是:
https://stepfunctions.us-east-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不对,这项服务的实际端点网址是什么?
编辑:(回答)
https://states.us-east-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud) 我想在调用函数之前和之后分配总内存,以确定我是否已正确释放所有内容.
我在C中这样做,我很生疏,所以请原谅我,如果这是一个天真的问题.我正在寻找类似于C#GC.GetTotalMemory(true)的东西,现在在Windows中.
现在我正在使用PROCESS_MEMORY_COUNTERS_EXand GetProcessMemoryInfo(...),在调用函数之前和之后但是我无法对输出做出正面或反面,因为如果我进入函数并注释掉一个调用free(...)那么它会给我相同的结果(之后总是大).这就是我现在所拥有的......
GetProcessMemoryInfo(hProc, &before, sizeof(before));
r = c->function();
GetProcessMemoryInfo(hProc, &after, sizeof(after));
if(r->result != 0) {
printf("error: %s\r\n", c->name);
printf(" %s\r\n", r->message);
printf(" %s (%d)\r\n", r->file, r->line);
failed++;
}
else if(after.PrivateUsage > before.PrivateUsage) {
printf("memory leak: %s\r\n", c->name);
printf(" %d kb\r\n", after.PrivateUsage - before.PrivateUsage);
failed++;
}
else succeeded++;
Run Code Online (Sandbox Code Playgroud)
得到这样的结果:
after.PrivateUsage - before.PrivateUsage = 12288
Run Code Online (Sandbox Code Playgroud)
如果我去评论一些免费电话,我会得到相同的结果.如何实际确定使用malloc分配的当前内存总大小?
我想在运行时用 C 生成一个函数。我的意思是我本质上想分配一些内存,指向它并通过函数指针执行它。我意识到这是一个非常复杂的主题,我的问题是 na\xc3\xafve。我还意识到有一些非常强大的库可以执行此操作(例如nanojit)。
\n\n但我想从基础开始学习这项技术。有知识的人可以给我一个非常简单的 C 示例吗?
\n\n编辑: 下面的答案很好,但这里是 Windows 的相同示例:
\n\n#include <Windows.h>\n\n#define MEMSIZE 100*1024*1024\ntypedef void (*func_t)(void);\n\nint main() {\n\n HANDLE proc = GetCurrentProcess();\n LPVOID p = VirtualAlloc(\n NULL,\n MEMSIZE,\n MEM_RESERVE|MEM_COMMIT,\n PAGE_EXECUTE_READWRITE);\n\n func_t func = (func_t)p;\n PDWORD code = (PDWORD)p;\n code[0] = 0xC3; // ret\n\n if(FlushInstructionCache(\n proc,\n NULL,\n 0))\n {\n func();\n }\n\n CloseHandle(proc);\n VirtualFree(p, 0, MEM_RELEASE);\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n 我在这里看一下nodejs crypto文档中非常简单的演示:https://nodejs.org/api/crypto.html#crypto_crypto_getdiffiehellman_group_name
他们很容易演示如何获得共享秘密...现在怎样?
如何使用所述共享密钥加密和解密数据?
我看到的所有样本都显示llvm::InitializeNativeTarget()在第一行被调用.
我刚刚完成了llvm和clang的构建,并试图让我的第一个样本运行,这个函数似乎是未定义的.我不确定它是否实际上是未定义的,这些例子是陈旧的,或者如果我在前一步中做错了什么.
如果它应该存在,我会在哪里找到这个函数的定义?我还应该打电话给别的吗?
InitializeNativeTarget(); /* error, undefined */
llvm_start_multithreaded();
LLVMContext context;
string error;
llvm::OwningPtr<MemoryBuffer> buffer;
auto result = MemoryBuffer::getFile("test.bc", buffer);
auto m = ParseBitcodeFile(buffer.get(), context, &error);
auto ee = ExecutionEngine::create(m, true, &error);
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,以及通过clang编译的test.bc文件,我得到一个空的ExecutionEngine,所以我假设我没有正确初始化.
从一个简单的测试我可以看到,如果你将结构传递给方法,它将通过值传递,但如果你首先将它分配给一个接口,它将通过引用传递.
interface IFoo { int Val { get; set; } }
struct Foo : IFoo { public int Val { get; set; } }
void Bar(IFoo foo) { foo.Val = 1; }
Foo foo = new Foo();
IFoo ifoo = new Foo();
Bar(foo);
Bar(ifoo);
Console.WriteLine(foo.Val); // 0, passed by value
Console.WriteLine(ifoo.Val); // 1, passed by ref
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,是否还有像这样传递结构的装箱操作?
假设我有两个代表A行的点,例如:
var A = [ { x: 385, y: 380 }, { x: 420, y: 400 }]
Run Code Online (Sandbox Code Playgroud)
我还有另外两点B和C,例如:
var B = { x: 385, y: 420 }
var C = { x: 405, y: 423 }
Run Code Online (Sandbox Code Playgroud)
我如何确定B和C是否都在A行的同一侧?为了添加一点上下文,我试图对六边形进行命中测试,其中B是六边形的中心点,C是当前鼠标位置,A是六边形的每条线.所有这些点基本上都是像素坐标,其中0,0是左上角.
我不需要这个快速开始我只是想尝试创建最简单的六边形命中测试算法.我的理论是,如果我能确定C与六边形的每条线的同一侧与B相同,则命中测试成功.我已经阅读了几个数学算法来做这个,但它们似乎总是在不同类型的坐标系中,我很难将它转换为可用于javascript的东西.
编辑:这是我的实际六角函数给出以下答案.这个问题的答案在更新功能中.
var TILE_WIDTH = 70
var TILE_HEIGHT = 80
function Hexagon(x, y) {
var normalColor = 'rgb(207, 226, 243)'
var hilightColor = 'rgb(204, 204, 204)'
var currentColor = normalColor
var coords = new TileCoordinates(x, y)
var points = [
{ x: …Run Code Online (Sandbox Code Playgroud) 我在同一目录中有.dll和.targets文件.在.targets文件中,我想将.dll添加到ItemGroup项.但是,如果我只是添加它类似于:
<Example Include="Example.dll" />
Run Code Online (Sandbox Code Playgroud)
Example.dll的路径似乎是相对于包含.targets文件的.csproj进行解析.如何将项目添加到.targets文件中的ItemGroup,并使用这样的相对路径?
例如,假设我有:
C:\lib\Example.dll
C:\lib\Example.targets
C:\src\Example.csproj
Run Code Online (Sandbox Code Playgroud)
从.targets文件中包含Example.dll时,完整路径解析C:\src\Example.dll为错误,我想要的是C:\lib\Example.dll.有没有人有什么建议?
这是我的字符串值:
string str = "32 ab d32";
Run Code Online (Sandbox Code Playgroud)
这个列表是我允许的角色:
var allowedCharacters = new List<string> { "a", "b", "c", "2", " " };
Run Code Online (Sandbox Code Playgroud)
我希望它成为:
str == " 2 ab 2";
Run Code Online (Sandbox Code Playgroud)
我想用空格替换任何不在允许的字符列表中的字符.
我正在使用angular2,新形式的api.
我想要一个电话号码输入框,它会在用户输入时自动格式化.
例如用户类型:
12345678901
Run Code Online (Sandbox Code Playgroud)
当他们输入一个可识别的电话号码时,它会变为
1 (234) 567-8901
Run Code Online (Sandbox Code Playgroud)
我想出了如何在输入控件上添加一个指令,但我不知道如何将自己注入到输入处理管道中.
我正在调用一个返回 a 的函数Result<T, E>,并且我想处理这种Ok情况,但Err如果返回错误则按原样返回。最干净的方法是什么?
例如,我有:
fn example() -> Result<(), Error> {
match foo() {
Ok(v) => bar(v),
Err(e) => Err(e),
}
}
Run Code Online (Sandbox Code Playgroud)
写这个有哪些替代形式?在堆栈中的每次调用中重新包装e另一个感觉很奇怪。Err另外,每个调用基本上都是 4 行样板文件......我只是在寻找一种方法来简化并使其更具可读性。我的愿望是让它在出现错误时返回错误,否则处理结果值。
c ×3
c# ×3
msbuild ×2
.net ×1
angular ×1
aws-sdk ×1
boxing ×1
byref ×1
byval ×1
c++ ×1
character ×1
clang ×1
cryptography ×1
dllexport ×1
dllimport ×1
function ×1
fxcop ×1
hittest ×1
javascript ×1
jit ×1
lines ×1
linux ×1
list ×1
llvm ×1
malloc ×1
math ×1
memory ×1
memory-leaks ×1
node.js ×1
points ×1
regex ×1
replace ×1
rust ×1