小编min*_*olf的帖子

使用Peverify和ILVerify对不安全的c#返回类型进行验证错误

我在验证一些包含返回指针的不安全方法的代码时遇到了这个问题.

示例可以表示为:

public class A
{
    public static unsafe int* GetAnswer()
    {
        int fakeValue = 42;
        return &(fakeValue);
    }

    public static void Main()
    {
        int i = 0;
        unsafe { i = *A.GetAnswer(); }
        System.Console.WriteLine(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用两个单独的验证工具,即ILVerify和Peverify.

重现步骤:

  1. 使用编译示例代码 csc example.cs /t:library /unsafe
  2. 校验 peverify example.dll
  3. 校验 ILVerify.exe -r C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll example.dll

2.和3.都将导致以下错误消息:

[IL]:错误:[C:\ src\test\example.dll:A :: GetAnswer()] [偏移量0x00000006] [找到Int32的地址]堆栈上的预期数字类型.

[IL]:错误:[C:\ src\test\example.dll:A :: Main()] [offset 0x00000009] [找到Native Int]预期在堆栈上的ByRef.2错误验证C:\ src\test\example.dll

神秘的是,一切都按预期编译和运行,它不会验证.有没有人对这种情况有什么了解?

c# cil peverify

7
推荐指数
1
解决办法
238
查看次数

跨插槽连接的ArrayList并发

我有一个问题.我的信念是,它与并发或线程同步有关,尽管我无法理解正在发生的事情.

这是我对FriendRequestList对象的数据流的描述.

从客户端,我们向另一个用户(工作人员)发送朋友请求.所以我们发送请求并将自己的用户名添加到他们的列表中User.incFriendReq.该实例只是一个ArrayList很好的参考.

所以现在我们将请求发送到服务器以接收我们自己的朋友请求列表(FriendRequestList.java).

所以现在问题.如果我在下面使用此代码,则用户在终止其连接(注销)之前将不会看到朋友请求,这将关闭连接.当他登录时,他只会在他的列表中看到该请求.

服务器端代码:

...... Worker.java ......

private Object getFriendRequests() {
    User me = Data.getUser(myUserName);
    if ( me == null ) {
        return new NoSuchUserException(); // Don't worry about it ;)
    }

    return new FriendRequestList(me.getFriendReq());
}
Run Code Online (Sandbox Code Playgroud)

... User.java ......

private List<String> incFriendReq;

public List<String> getFriendReq() {
    return incFriendReq;
}
Run Code Online (Sandbox Code Playgroud)

客户端

... Communication.java ......

public FriendRequestList getRequests() {
    sendObject(new GetRequests());
    return inputHandler.containsRequests();
}
Run Code Online (Sandbox Code Playgroud)

... MessageListener.java ...

public void run() {
    ... …
Run Code Online (Sandbox Code Playgroud)

java sockets multithreading arraylist

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

无法在Mongodb中序列化LocalDate

我使用java 8 java.time.LocalDate来解析日期.

但是尝试将一个LocalDate对象插入到mongodb中.我在java驱动程序中遇到错误:

private def writeData(measure: DBCollection, installation: Int, date: String, dates: ListBuffer[LocalDate],
                    values: ListBuffer[BigDecimal], validated: Boolean, overwrite: Boolean) {
  val timeValues: BasicDBList = new BasicDBList
  var i = 0
  while ( i < dates.size )  {
    val obj: BasicDBObject = new BasicDBObject("time", dates(i))
    obj.put("value", values(i).toString())
    timeValues.add(obj)
    i += 1
  }
  if ( debug ) System.out.println("Storedata: " + timeValues.toString) <-- error here
Run Code Online (Sandbox Code Playgroud)

错误日志:

java.lang.RuntimeException: json can't serialize type : class java.time.LocalDate at com.mongodb.util.ClassMapBasedObjectSerializer.serialize(ClassMapBasedObjectSerializer.java:77) at com.mongodb.util.JSONSerializers$MapSerializer.serialize(JSONSerializers.java:317) at com.mongodb.util.ClassMapBasedObjectSerializer.serialize(ClassMapBasedObjectSerializer.java:79) at com.mongodb.util.JSONSerializers$IterableSerializer.serialize(JSONSerializers.java:290) …

java json scala mongodb

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

Scala多个构造函数问题

我无法理解为什么这段代码错了,错误信息是:

error: '}' expected but '.' found.
Run Code Online (Sandbox Code Playgroud)

在线

this.tX = cX
Run Code Online (Sandbox Code Playgroud)

码:

class Quaternion {  
  private var tX: Float = 0
  private var tY: Float = 0
  private var tZ: Float = 0
  private var tW: Float = 1

  def this(cX: Float, cY: Float, cZ: Float, cW: Float) {
    this.tX = cX
    this.tY = cY
    this.tZ = cZ
    this.tW = cW
  }

  ...
Run Code Online (Sandbox Code Playgroud)

请帮我解决我可能明显的错误.

syntax constructor scala

1
推荐指数
3
解决办法
2637
查看次数

选项方法签名,此范围内已定义的函数

def createFloatBuffer(data: Option[Quaternion]*): Option[FloatBuffer] = data match {
  ...
}

def createFloatBuffer(data: Option[Vector3f]*): Option[FloatBuffer] = data match {
  ...
}
Run Code Online (Sandbox Code Playgroud)

由于两种方法具有相同的方法签名,因此不会编译此代码.没有类型不知道调用哪种方法.

我可以重命名方法,但是我想在我的代码中重载样式.

scala overloading method-signature

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