小编Jen*_*ger的帖子

AppDomain.AppendPrivatePath 替代方案?

我主要通过谷歌阅读了很多东西(不是在这里),但没有找到可以回答我的问题的东西,所以我在这里问。

我确实想添加到“某些东西”(AppDomain我认为),以便我的代码可以在运行时解析如何Assembly.CreateInstance访问我的应用程序编译文件夹之外的特定 DLL。

我真的觉得AppDomain是要使用的类,AppendPrivatePath听起来像要使用的方法,但它现在“已过时”... msdn 建议使用 PrivateBinPath 但据我所知,我必须创建一个新的 AppDomain 并通过我的测试,我感觉Assembly.CreateInstance不在我的新 AppDomain 中寻找引用

一些代码如:

AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
domaininfo.PrivateBinPath = "D:\\.....\\bin\\Debug\\";

Evidence adevidence = AppDomain.CurrentDomain.Evidence;

AppDomain newDomain = AppDomain.CreateDomain("FrameworkDomain", adevidence, domaininfo);
Run Code Online (Sandbox Code Playgroud)

有效,但是当我尝试时CreateInstance,我得到了一个 TargetInitation 异常

我也尝试过:

Thread.GetDomain().SetupInformation.PrivateBinPath = "D:\\.....\\bin\\Debug\\";
Run Code Online (Sandbox Code Playgroud)

这听起来“特别”,但对我来说很好,但它不起作用......

我真的觉得我必须给出D:\\.....\\bin\\Debug\\当前 AppDomain 的路径,但它不再可能,因为AppendPrivatePath已经过时了......

有什么帮助吗?

c# assemblies appdomain

5
推荐指数
1
解决办法
5432
查看次数

如何在C程序中打印堆栈的内容?

正如标题所说,我想在我的C程序中打印堆栈的内容.

以下是我采取的步骤:

  • 我做了一个简单的汇编(helper.s)文件,其中包含一个返回我的ebp寄存器地址的函数和一个返回我的esp寄存器地址的函数

    .globl get_esp
    
    get_esp:
        movl %esp, %eax
        ret
    # get_ebp is defined similarly, and included in the .globl section
    
    Run Code Online (Sandbox Code Playgroud)
  • 我叫get_esp ()get_ebp ()从我的C程序功能(fpC = get_esp ();其中FPC是一个int)
  • 我(成功地,我认为)打印了我的esp和ebp寄存器的地址(fprintf (stderr, "%x", fcP);)
  • 我尝试了,但未能打印出我的esp寄存器的内容.(我想fprintf (sderr, "%d", *fcP);fprintf (sderr, "%x", *((int *)fcP));其他方法中).处理此行时,我的程序在运行时遇到分段错误.

我究竟做错了什么?

编辑:这必须通过调用这些汇编函数来获得堆栈指针来完成.EDIT2:这是家庭作业.

c x86 assembly pointers

5
推荐指数
1
解决办法
6982
查看次数

如何将汇编版本号1增加1

我将AssemblyVersion属性设置为: [assembly: AssemblyVersion("1.0.0.*")]

它随着装配和时间的变化而增加.现在它是:{1.0.0.20042}如果我不更改程序集内的cs文件,它不会增加.但是如果我在这个程序集中更改了一个类文件,那么版本只会增加一个.如果我没有误解这些文章,它的增加取决于时间.但我想设置这个增量取决于内部版本号.

有没有办法从这个版本号学习内部版本号或设置它的增量1?

versioning assemblies visual-studio build-numbers

5
推荐指数
1
解决办法
2089
查看次数

没有LaTeX图片边距

我的论文中有很多类型的图表.我目前使用水平页面使图片可读.

我想知道如何LaTeX从有图片的页面中删除边距.

你怎么能没有图片的边距LaTeX

latex image

4
推荐指数
2
解决办法
9635
查看次数

二进制编程资源

我在互联网上搜索了Binary中的编程,人们似乎唯一愿意给出的回答是:"你为什么要用二进制编程?" "这很愚蠢,使用装配." "你没有什么可以摆脱它,学习没有意义."

如果你是这些人之一,我感谢你的意见,但它没有回答我的问题.

虽然我不打算实际尝试在Binary中编程,但我知道的理由是:

  1. 我有兴趣知道汇编命令背后的二进制指令.

  2. 我正在设计一个生成随机二进制指令的实验.我希望它们是有效的二进制命令,我希望能够解释这些命令在运行时会做什么.

话虽如此,有没有人知道任何人可以学习二进制编程的资源?

binary assembly

4
推荐指数
1
解决办法
197
查看次数

Assembly.LoadFrom之后的ResolveEventHandler

我正在加载Assembly.LoadFrom()程序集使用,因为程序集位于与Application Base目录不同的路径中.

Dim oAssembly As Assembly = _
Assembly.LoadFrom("C:\\MyFolder\\" + ddlXlate.SelectedItem.ToString() + ".dll")
Run Code Online (Sandbox Code Playgroud)

Type从该程序集中消耗了一个没有任何问题:

oXML = CType(oAssembly.CreateInstance(sBaseType + ".XlateContainer"), _
XlateBase.XlateContainer)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试Type从下面的另一个方法中使用此程序集中的a时,会出现问题:

oComboBox.DataSource = _
[Enum].GetValues(Type.GetType(sType + "+ItemEnum," + sAssemblyName))
Run Code Online (Sandbox Code Playgroud)

sAssemblyName是我LoadFrom()实际加载的那个.在它说无法找到装配后,我使用了AssemblyResolve解决了我的问题的事件:

订阅AssemblyResolve活动:

AddHandler AppDomain.CurrentDomain.AssemblyResolve, _
AddressOf MyResolveEventHandler
Run Code Online (Sandbox Code Playgroud)

事件处理程序方法:

Private Shared Function MyResolveEventHandler(ByVal sender As Object, _
    ByVal args As ResolveEventArgs) As Assembly
    Return Assembly.LoadFrom("C:\\PSIOBJ\\" + args.Name + ".dll")
End Function
Run Code Online (Sandbox Code Playgroud)

我想也许错误发生,因为它找不到我LoadFrom()已经加载的程序集清单文件中定义的依赖程序集但是当我检查时args.Name,我看到它试图加载相同的程序集,之后它工作没有任何问题.因此,在添加更改的事件之前,基本上无法找到已加载程序集中的类型.

我的旧代码正在使用AppDomain.CurrentDomain.Load() …

.net c# vb.net assemblies

4
推荐指数
1
解决办法
3752
查看次数

让runnable睡觉

我有一个Java问题.我想编写一个程序,其中有Class Main,它有一些类的ThreadList(Class Task),它只写一个字母和数字.Object Main只是从ArrayList中唤醒一个Thread,让它在同一个对象(Main)睡眠另一个时执行某些操作.

它工作正常:0A,0B,0C,1B,1C,1A,2B,2A,2C,3B,3C,3A,4B,4C,4A,5B,5A,5C,

但只有当我评论:e.printStackTrace()e是Exception然后我在Main.run的java.lang.Object.notify(Native Method)中获得了很多java.lang.IllegalMonitorStateException(Main.java:22)

所以通知工作错误,我应该如何正确唤醒它,请告诉我,显示,正确.请

import java.util.ArrayList;

import java.util.ArrayList;

public class Main extends Thread {
ArrayList<Thread> threads;

public Main() {
    super();
    threads = new ArrayList<Thread>();
}

public void run() {
    for (int i = 0; i < 3; i++) {
        threads.add(new Thread(new Task(i + 65)));
    }
    long cT = System.currentTimeMillis();
    for (int i = 0; i < threads.size(); i++) {
        threads.get(i).start();
    }
    while (System.currentTimeMillis() - cT < 10000) {
        for (int i = 0; i < threads.size(); …
Run Code Online (Sandbox Code Playgroud)

java multithreading notify

4
推荐指数
1
解决办法
5万
查看次数

如何在十六进制的程序集文件中查找方法?

我有一个测试程序集,我想在文件中找到方法

[CompilerGenerated]
public bool get_CreateFlash()
{
    return this.cZBH;
}
Run Code Online (Sandbox Code Playgroud)

我使用十六进制编辑器和模板进行搜索

2B * 26 16 02 7B * * * * 0A 2B * 06 2A
Run Code Online (Sandbox Code Playgroud)

其中*是任何字节,因为我没有在ILSpy等工具中看到确切的字节.

我找到了1500场比赛,自然而然就是吸气.不同的是7B****,就像这样

"2B 02 26 16 02 7B 1D 00 00 04 0A 2B 00 06 2A"
"2B 02 26 16 02 7B 1E 00 00 04 0A 2B 00 06 2A"
...
etc.
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到我需要的东西?

.net reflection hex .net-assembly

4
推荐指数
1
解决办法
2261
查看次数

转到优化重构

我有一个"MyFunction",我一直在思考是否应该或不应该使用goto和类似(希望很少见)的情况.所以我正试图为这种情况建立一种快节奏的习惯.待办事项或不执行任务.

int MyFunction()
{   if (likely_condition)
    {
    condition_met:
        // ...
        return result;
    }
    else /*unlikely failure*/
    {   // meet condition
        goto condition_met;
    }
}
Run Code Online (Sandbox Code Playgroud)

我打算为可能的情况净化失败的条件跳转指令的好处.但是我没有看到编译器如何在没有这样的情况下知道哪些可以简化案例概率.

  1. 它的工作正常吗?
  2. 这些好处值得混淆吗?
  3. 是否有更好的(更简洁,更结构化,更具表现力)的方式来实现这种优化?

c c++ goto

4
推荐指数
1
解决办法
331
查看次数

装配不在GAC,但gacutil显示它在那里

我注意到我的系统上有关全局程序集缓存(GAC)的一些奇怪行为.我感兴趣的程序集是log4net Version = 1.2.11.0

输出gacutil /l "log4net"是:

C:\ Windows\system32> gacutil/l"log4net"Microsoft(R).NET全局程序集缓存实用程序.版本4.0.30319.1版权所有(c)Microsoft Corporation.版权所有.

全局程序集缓存包含以下程序集:
log4net,Version = 1.2.10.0,Culture = neutral,PublicKeyToken = 1b44e1d426115821,processorArchitecture = MSIL
log4net,Version = 1.2.11.0,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a,processorArchitecture = MSIL

物品数量= 2

但是,通过资源管理器shell(重新启动之前和之后)查看GAC只显示一个版本:

在此输入图像描述

由于我的应用程序无法解析程序集,但是当我将它放入应用程序库(bin文件夹)时工作正常,这一点更加复杂.根据这篇文章,GAC将在应用程序基础之前进行探测- 这将指向程序集不在GAC中.

log4net Version=1.2.11.0GAC 也是如此?如果是这样,为什么我的应用程序找不到它?

.net c# gac global-assembly-cache .net-assembly

4
推荐指数
1
解决办法
2439
查看次数