小编DIM*_*Sum的帖子

如何在运行时重新转换类

我正在修改已经加载到jvm中的类.我找到的解决方案是:

  • 1st将代理程序附加到pid指定的jvm.(例如8191)(代码:AttachTest)
  • 2从已经加载到jvm中的类(例如8191)中查找要修改的类.
  • 3使用仪器添加变压器(代码:AgentMain)
  • 4修改方法中的类(例如Person)transform(代码:DemoTransformer)
  • 5th使用retransformClasses重新转换

从第1步到第5步工作正常,但是有问题retransformClasses.它transform再次调用,其中包含修改类的代码.它修改了我从不想修改的其他类.我认为问题可能发生在addTransformer或期间retransformClasses.但我还是很困惑.那么,如何重新转换一个类?有任何想法吗?谢谢

public class AttachTest {
    public static void main(String[] args) throws AttachNotSupportedException,
        IOException, AgentLoadException, AgentInitializationException { 
        String agentPath = "D:\\work\\workspace\\myjar\\loaded.jar";
        String vid = args[0]; 
        VirtualMachine vm = VirtualMachine.attach(vid);
        vm.loadAgent(agentPath);
    }
}
Run Code Online (Sandbox Code Playgroud)

//代理

public class AgentMain {
    public static void agentmain (String agentArgs, Instrumentation inst)
        throws ClassNotFoundException, UnmodifiableClassException,
        InterruptedException {
    Class<?> [] allLoadedClasses = inst.getAllLoadedClasses();
        String tmpString = null;
        for (int …
Run Code Online (Sandbox Code Playgroud)

java aop jvm cglib

35
推荐指数
1
解决办法
2万
查看次数

在VMware ESXi中生成对数据访问的函数调用

我目前正在使用Simics模块(参见第6章)来监听指令提取和数据访问,并对所有这些事件运行回调,以便检测在Simics x86上运行的内核.例如,我可以创建一个Simics模块,如下所示:

/* Initialize our Simics module. */
void init_local(void)
{
    const class_data_t funcs = {
        .new_instance = ls_new_instance,
        .class_desc = "desc",
        .description = "A simics module."
    };

    /* Register the empty device class. */
    conf_class_t *conf_class = SIM_register_class(SIM_MODULE_NAME, &funcs);

    /* Register our class class as a trace consumer. */
    static const trace_consume_interface_t trace_int = {
        .consume = (void (*)(conf_object_t *, trace_entry_t *))my_tool_entrypoint
    };
    SIM_register_interface(conf_class, TRACE_CONSUME_INTERFACE, &trace_int);
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,Simics将调用my_tool_entrypoint每个指令和每个数据访问; 允许我按照我认为合适的方式检测我正在运行的内核.毋庸置疑,这是一个非常酷且非常强大的功能.

我的问题是:

  1. 这样的功能是否适用于在VMware ESXi(或VMware Workstation)Hypervisor上运行的程序?如果是这样,该功能的文档在哪里?
  2. 如果它在ESXi上不可用,是否可以在Xen等任何其他虚拟机管理程序上使用?

请注意,我 …

xen virtualization vmware esxi hypervisor

9
推荐指数
1
解决办法
278
查看次数

为什么保留x86 CR1控制寄存器?

从i386 CPU开始,英特尔处理器具有公开的控制寄存器,允许内核配置处理器并指定当前正在执行的任务/进程/线程的特征.根据英特尔系统编程手册(第2-13节),CR1控制寄存器为"保留".也就是说,内核操作控制寄存器会CR1导致未定义的行为.正如文章指出,也有CR2, CR3, CR4CR8控制寄存器,虽然他们都没有保留.

为什么CR1保留?奇怪的是,英特尔会引入一个保留的控制寄存器,然后开始添加非保留的控制寄存器,而不是简单地添加功能,CR1因为这样做不会导致任何向后兼容性中断(这是保留它的全部要点).http://www.pagetable.com/?p=364推测CR1保留了第二个可用于架构配置的寄存器,但正如文章中提到的那样,CR4在i486推出时使用了.

x86 intel cpu-architecture

6
推荐指数
1
解决办法
601
查看次数

FOS Elastica - 获取查询的字符串表示形式

我正在对使用FOS Elastica的存储库进行单元测试,我想知道是否有人知道如何获取查询的字符串版本,而不是数组形式.这是我的存储库方法:

    /**
     * Creates query object by either first or last name, with given parameters
     *
     * @param $name
     *
     * @param array $params
     *
     * @return Query
     */
    public function findByFirstOrLast($name, array $params)
    {
        $queryString = new QueryString();
        $queryString->setQuery($name);
        $queryString->setFields(array('firstName', 'lastName'));


        $query = new Query();
        $query->setQuery($queryString);
        $query->setSort(array($params['sort'] => array('order' => $params['direction'])));

        return $query;
    }
Run Code Online (Sandbox Code Playgroud)

假设$name = 'foo';(我正在对id进行排序),我相信相应的FOS Elastica查询应该是

{
    "query":
    {
        "query_string":
            {
                "query":
                    "foo",
                    "fields":["firstName","lastName"]
            }
    },
    "sort":
    {
      "id":
          {
              "order":"asc"
          }
    }
} …
Run Code Online (Sandbox Code Playgroud)

elasticsearch symfony-2.3 foselasticabundle

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

不同zlib压缩级别的压缩率

我正在考虑使用哪种级别的zlib压缩,并且对可以在zlib命令中指定的不同压缩级别的不同压缩率感到好奇。该ZLIB手册具有用于指定的压缩级别以下常量:

#define Z_NO_COMPRESSION         0
#define Z_BEST_SPEED             1
#define Z_BEST_COMPRESSION       9
#define Z_DEFAULT_COMPRESSION  (-1)
Run Code Online (Sandbox Code Playgroud)

显然,数量越少意味着压缩和放缩的延迟时间越短,但代价是压缩文件较少,而数量越多,压缩效果越好,而代价则是等待时间更长。

我的问题是,对于不同的压缩级别,可以预期的压缩率是多少?这个zlib网页说,在最大压缩的情况下,更典型的zlib压缩率在2:1到5:1的数量级上,但是其他压缩因子的压缩率/范围也一样吗?

compression zlib

2
推荐指数
1
解决办法
5818
查看次数