微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我正在某个项目中,我必须从内存地址中获取价值并遇到此表达式

如何解决我正在某个项目中,我必须从内存地址中获取价值并遇到此表达式

如何解释该表达式

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/abc]] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$startChild.call(ContainerBase.java:1377) at org.apache.catalina.core.ContainerBase$startChild.call(ContainerBase.java:1367) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:902) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:423) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:932) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.startup.Catalina.start(Catalina.java:633) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/scriptless]] at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) at org.apache.catalina.core.ContainerBase$startChild.call(ContainerBase.java:1377) at org.apache.catalina.core.ContainerBase$startChild.call(ContainerBase.java:1367) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:902) ... 21 more

最初P设置为空。

其中P =一些内存地址。

value =从文件中读取的一些十六进制值。

有人可以解释这个表达式在做什么吗?

解决方法

void *p = NULL;   // defines void pointer holding NULL pointer value.

p = 0x456789;     // assignes p with whe integer value connverted to (void *). 
                  //On many systems this integer value represents the memory address

int x = *(int *)((char *)p + value);
                  // 1. casts p to the char pointer.
                  // 2. Adds value chars to the pointer value. Usually char is 8 bits
                  //    so the referenced object will be "value" bytes ahead of 
                  //    the original pointed location
                  // 3. Casts this pointer to the the pointer to int
                  // 4. Dereferences (reads) the integer pointed by the pointer

这种操作通常在标准C中调用UB。它的行为取决于实现。这是低级编程(硬件寄存器)中非常常见的操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。