- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究gcc生成的汇编代码。但是,我发现了以下代码片段:
.LBE58:
.loc 1 178 0
cmpl $8224, %ebp
jl .L12
cmpl $8225, %ebp
jle .L19
leal -8240(%ebp), %eax
cmpl $1, %eax
ja .L12
.LVL50:
.LBB76:
.LBB77:
.loc 1 373 0
movl 60(%esi), %eax
.loc 1 374 0
cmpl $8240, %ebp
.loc 1 373 0
movl 4(%eax), %ebx
通过查看源代码,我发现这应该是一条jmp指令。为什么gcc编译器使用3条指令而不是1条指令?它是否更高效或者在X86 cpu之间可移植(我不知道有哪个x86 cpu不支持jmp指令)
我的原因:ja 的下一条指令是 .LBB77 处的 mov 指令,该 mov 指令对应于第 373 行的源代码。如果 ja 不跳转,那么这是一个跨函数执行。这是一种非常奇怪的行为,并且是意料之外的。因此我断定它一定是一个“jmp”。
最终结果:这不是 jmp。它可能会运行源代码中第373行的指令。关闭。
==============================更多信息:
178 switch (s->state)
179 {
180 case SSL_ST_BEFORE:
181 case SSL_ST_ACCEPT:
182 case SSL_ST_BEFORE|SSL_ST_ACCEPT:
183 case SSL_ST_OK|SSL_ST_ACCEPT:
..................
342 default:
343 SSLerr(SSL_F_SSL2_ACCEPT,SSL_R_UNKNOWN_STATE);
344 ret= -1;
345 goto end;
346 /* BREAK; */
347 }
348
349 if ((cb != NULL) && (s->state != state))
350 {
351 new_state=s->state;
352 s->state=state;
353 cb(s,SSL_CB_ACCEPT_LOOP,1);
354 s->state=new_state;
355 }
356 }
357 end:
358 s->in_handshake--;
359 if (cb != NULL)
360 cb(s,SSL_CB_ACCEPT_EXIT,ret);
361 return(ret);
362 }
363
364 static int get_client_master_key(SSL *s)
365 {
366 int is_export,i,n,keya,ek;
367 unsigned long len;
368 unsigned char *p;
369 const SSL_CIPHER *cp;
370 const EVP_CIPHER *c;
371 const EVP_MD *md;
372
373 p=(unsigned char *)s->init_buf->data;
374 if (s->state == SSL2_ST_GET_CLIENT_MASTER_KEY_A)
375 {
376 i=ssl2_read(s,(char *)&(p[s->init_num]),10-s->init_num);
377
378 if (i < (10-s->init_num))
379 return(ssl2_part_read(s,SSL_F_GET_CLIENT_MASTER_KEY,i));
380 s->init_num = 10;
381
最佳答案
乍一看,这段小代码似乎是在抓取堆栈上某个东西的地址——局部变量的地址——将其放入寄存器中,看看它是否大于1,然后执行仅当存在时才跳转。
但我不太确定为什么 gcc 想要将地址与文字 1
进行比较,因为几乎每个地址都大于 1,在这种情况下 jmp
会可能和 ja
一样有效。那么也许它使用ebp
寄存器来保存堆栈地址以外的东西?
无论如何,这并不是严格意义上的简单跳转。
关于c - 为什么gcc生成 "leal -8240(%ebp), %eax; cmpl $1, %eax; ja XXX"而不是jmp指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27100578/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 3 年前。 Improve th
根据我的理解,jmp 执行无条件跳转,而 ja 如果值无符号则跳转。我的理解对吗? 如果有一个例子,我们将不胜感激。 最佳答案 您说得对,jmp 执行的是无条件跳转。 不过,您对 ja 的描述不正确。
我无法理解这一点。它是 intel 语法 cmp eax, 0x19 ja greater eax 包含值 -40。 http://en.wikibooks.org/wiki/X86_Assembly
我无法理解汇编语言的 ja 和 jg 之间的区别。我有一段代码: cmp dh, dl j-- hit 我询问哪个条件跳转命中(替换 j-- 命中)将采用 DX = 0680 的十六进制值。 这会
我尝试使用 MATLAB Builder JA 在 Java 中运行 MATLAB 代码获取 JAR 文件。 test.m 工作正常,但不是依赖于 test.m 的 test2.m。 我的项目需要依赖
这个问题在这里已经有了答案: Java : recursive constructor call and stackoverflow error (5 个答案) 关闭 4 年前。 为什么在下面的程序
在我的 sitecore 网站中,客户要求进行一些改进。他们要我将/ja-jp/网站的标准字体样式更新为 Microsoft 的 Meiryo 字体。这包括更新与所有模板和子布局相关的所有基于 HTM
对于斯堪的纳维亚字母以及对其进行编码时,我遇到了问题。使用下面的代码,javascript向变量添加一些额外的编码 function doit(params) { var ur
本文整理了Java中com.ja.yuml.render.remote.YumlRemoteRenderer类的一些代码示例,展示了YumlRemoteRenderer类的具体用法。这些代码示例主要来
如 here 所述,Mozilla 在 Firefox/Thunderbird 中使用类似 zip 的方法来处理他们的 omni.ja。 .在同一篇文章中,他们只列出了用于解压缩的 Windows 工
我是 R 和协整的新手,所以在我尝试解释我正在尝试做的事情时请耐心等待。我试图在加拿大/美国西部电力系统的 1500-2000 个电压变量中找到协整变量。频率是每小时一次(在幂中很常见),协整组合可以
我尝试使用 JDK 9 和 gradle 构建一个已经存在的项目。 我想我的模块加载有问题。 这是我的 gradle 依赖项的示例: compile("org.springframework:spri
首先我要提前感谢大家阅读这么长的帖子。我真的很感谢你的帮助。 问题是我一直在研究如何为我正在为大学工作的项目“连接”Matlab 和 Java。我认为最合适的选择是使用 Matlab Builder
我在使用 Java 调用 MATLAB JA Builder 编译代码时遇到了一个奇怪的问题。详情如下: 代码对大型 .mat 文件执行 load() 如果在 MATLAB 中打开 mat 文件(通过
我的网站使用 JA Merro joomla 模板。但是当我当时从用户站点查看添加的文章时,某些类型的操作系统垃圾值会显示在文章的开头和结尾处。 “горящие туры в Индонезию”故
我在运行 testcafe 时有时会遇到错误 /opt/testcafe/node_modules/testcafe-hammerhead/lib/request-pipeline/connectio
所以我的目标是写出对应于这个程序集的 C 代码: 0: 85 f6 test %esi,%esi 2: 78 13 js
由于我的主要操作系统是linux并且在visual studio上有项目,所以我决定使用在线编译器来实现它。我找到了 this这是许多人建议的。所以这是我的代码: #include using na
目前,我正在使用 PhotoEditor 开发一个 Android 应用程序图书馆。我已按照页面上的说明进行了入门和设置 View 部分的操作。但是,不知何故,我无法膨胀包含 PhotoEditorV
我一直在尝试用 Java 运行 hello world 示例,使用 Matlab Builder JA 编译在装有 Snow Leopard 的 Intel Mac 上。当我在终端上运行 .jar 时
我是一名优秀的程序员,十分优秀!