我已经在(Java)字节码上工作了一段时间,然而,我从未想过要问为什么会输入一些指令?我知道在ADD操作中,我们需要区分整数加法和FP加法(这就是为什么我们有IADD和FADD).但是,为什么我们需要区分ISTORE和FSTORE?它们都涉及完全相同的操作,即从堆栈移动32位到局部变量位置?
我能想到的唯一答案是类型安全,以防止这种情况:( ILOAD,ILOAD,FADD).但是,我认为类型安全性已经在Java语言级别实施.好的,Class文件格式没有直接与Java结合,所以这是一种为不支持它的语言强制执行类型安全的方法吗?任何想法?谢谢.
编辑:跟进Reedy的回答.我写了这个最小的程序:
public static void main(String args[])
{
int x = 1;
}
Run Code Online (Sandbox Code Playgroud)
编译为:
iconst_1
istore_1
return
Run Code Online (Sandbox Code Playgroud)
使用字节码编辑器,我改变了第二条指令:
iconst_1
fstore_1
return
Run Code Online (Sandbox Code Playgroud)
它返回了一个java.lang.VerifyError:期望在堆栈上找到float.
我想知道,如果在堆栈上没有类型的信息,只有位,FSTORE指令是如何知道它处理的是int而不是浮点数?
注意:我找不到这个问题的更好的标题.随意改进它.
我必须遗漏一些东西,因为昨晚我惊讶地发现谷歌搜索check gem dependencies和类似没有透露答案.
我基本上是在大致相当于rpm -V- 一个命令将通过我的一些或所有已安装的gems并确保它们的依赖项也已安装.由于gem install默认情况下安装任何依赖宝石,通常这不是必需的; 但是,如果你gem uninstall是一个宝石,并告诉它继续卸载,即使其他宝石依赖于正在卸载的宝石,那么显然你最终会破坏依赖.问题是,如何在不安装/卸载/更新任何宝石的情况下列出那些破坏的依赖项?
涉及Bundler的NB答案对我来说没什么用处,因为我仍然因为各种原因而被困在Rails 2.x上.
我们使用的是最新的JDK 7(u45)和ProGuard版本4.10
在混淆之后,最初开始我们的分发失败,出现以下错误:
Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at
branch target 155
Exception Details:
Location:
com/bla/bla/service/ioc/SpringBootstrap.c()V @0: getstatic
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: b200 73b6 008b 9900 82b2 0073 b800 933b
0000010: 1a99 0074 b200 73b6 008d 9900 6bb2 0074
0000020: 1221 b600 cfb8 0092 4c2b b600 9c12 1db9
...
Exception Handler Table:
bci [0, 152] => handler: 155
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) 在我的社区中,每个用户应该只有一个帐户.
所以我需要一个解决方案来验证特定帐户是用户拥有的唯一帐户.目前,我使用电子邮件验证.但我真的不需要用户的电子邮件地址.我只是试图阻止每个人的多个帐户.
但是,这当然不起作用.无论如何,人们创建临时电子邮件地址或拥有多个地址.因此,他们使用不同的电子邮件地址注册,因此他们获得了多个帐户 - 这是不允许的.
所以我需要一个比(易于规避)电子邮件验证更好的解决方案.顺便说一下,我不想使用OpenID,Facebook Connect等.
要求:
你有好方法的想法吗?非常感谢你提前!
附加信息:
我的社区是一个浏览器游戏,即足球经理游戏.使多个帐户具有吸引力的是用户可以交易他们的玩家.因此,如果您有两个账户,您可以购买价格过高的弱势玩家,这是"真正的"买家无法支付的.因此,当"第二个帐户"变得贫穷时,您的"第一个帐户"会获得巨额资金.但你不必关心:只需创建另一个帐户,使第一个帐户更丰富.
我已经开发了一个AppEngine应用程序,我将其转移到另一家公司,我希望在转移到另一家公司完成后,从该应用程序中删除我自己的个人访问权限.
我转移所有权的第一步是邀请另一个人作为具有"所有者"角色的管理员.
但是,在传输之后,在管理员/权限控制台中我的名字旁边,我看到消息"无法删除唯一的SMS验证所有者" - 这似乎使我无法从应用程序中删除自己作为所有者.
似乎其他"所有者"无法通过SMS验证其帐户,因为他们已拥有该应用程序的管理员访问权限.
另一个帐户如何获得"SMS验证",以便我们可以从AppEngine应用程序中以管理员身份删除我的帐户?
我理解像Coq和Idris这样的语言如何用于证明用这些语言编写的程序的属性(根据我在该主题中的一点经验来判断.)但是我想知道是否有一种平易近人的方式在外部做同样的事情,在现有的代码库.
有没有办法使用像Coq或其他专业工具这样的工具来证明用C++编写的算法的正确性?如果是这样,这样做有什么要求?
谷歌推出了reCAPTCHA v3.它消除了所有用户的摩擦.我希望用它来保护我的网站.但是,我不确定这将如何保护我的网站.如果黑客在没有使用我提供的界面的情况下使用外部工具对我的网站上的URL进行垃圾邮件怎么办?reCAPTCHA v3将如何阻止它?
javascript verification spam-prevention recaptcha invisible-recaptcha
我正在处理不受信任的外部存储,需要确保存储提供程序不会隐藏查询中的任何记录.
例:
我有两个可信实体TA和TB,这些实体应该能够改变存储在云/不可信存储中的数据,但没有其他人.所以我的解决方案我为TA和TB配备了Public-Keys,并且我有一个数据结构,可以与具有版本的表进行比较
Ver | Data | Signature | Signee
4 | ... | (AAAAAAAAA)_TA | TA
3 | ... | (ZZZZZZZZZ)_TB | TB
2 | ... | (YYYYYYYYY)_TA | TA
1 | ... | (XXXXXXXXX)_TA | TA
Run Code Online (Sandbox Code Playgroud)
因此,当我从存储提供程序中检索此类表时,我可以轻松验证签名并检查签名是否正确,是否允许签名者更改表.
但是,我还要检查记录的完整性.假设TA上传版本4,但TB只知道版本3之前的所有记录.现在,当TB查询时,存储提供商可能完全拒绝版本4.
由于TA和TB之间没有直接的辅助通道,因此无法更换当前版本.有没有办法规避这个?
我在考虑定期插入虚拟记录至少有一些时间的确定性.但是,这种方法缺乏可伸缩性,会导致大量存储和签名开销.我正在寻找的实际系统属性是什么(很难找到你不知道名字的研究)?
cloud security encryption verification public-key-encryption
我正在寻找一种使用提供给我的CA证书来验证X509格式的客户端证书的node.js方法(这些证书都不是由我创建/管理的,我的软件只需要验证发送给它的蜜蜂) 。
我已经找到了完成这项工作的几个模块,但是每个模块都有问题:
x509.verify(cert, CABundlePath, cb),但是它需要从FS读取证书,而且我已经将它们存储在内存中了。这很麻烦,因为到达我应用程序的每个Web请求都将完成此操作。forge.pki.BadCertificate从抛出了一个错误forge.pki.verifyCertificateChain(caStore, [ cer ], cb)。pem.verifySigningChain(cer, [ ca ], cb)会抱怨在从中加载文件时会出错/var/...。即使可行,我也会避免使用此lib作为依赖openssl命令行工具的方式,我想避免现在,我感到非常愚蠢,因为我无法通过上述任何模块来完成此简单任务。有人可以给我指出一个简单的解决方案,该解决方案可以让我使用给定的CA证书来验证X509证书的签名/有效性吗?:s
[编辑]基本上,我需要openssl verify -verbose -CAfile ca-crt.pem client1-crt.pem的Node.js,但不依赖于OpenSSL的命令行工具,并没有该证书暂时保存到磁盘。
[edit2]是否可以仅使用https://nodejs.org/api/crypto.html#crypto_verify_verify_object_signature_signatureformat?
verification ×10
.net ×1
account ×1
admin ×1
bytecode ×1
c++ ×1
ca ×1
certificate ×1
cloud ×1
config ×1
coq ×1
dependencies ×1
encryption ×1
gem ×1
java ×1
java-7 ×1
javascript ×1
node.js ×1
obfuscation ×1
proguard ×1
recaptcha ×1
ruby ×1
security ×1
ssl ×1
strongname ×1