Error[8]: Undefined offset: 1, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的. 我试图在gdb中disas代码,但我无法理解一些步骤.代码是: 0xb7ead420 <siglongjmp+0>: push %ebp0xb7ead421 <siglongjmp+1>: mov %esp,%ebp0xb7ead423 <siglongjmp+3>: s 我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的.

我试图在gdb中disas代码,但我无法理解一些步骤.代码是:

0xb7ead420 <siglongjmp+0>:      push   %ebp0xb7ead421 <siglongjmp+1>:      mov    %esp,%ebp0xb7ead423 <siglongjmp+3>:      sub    [+++]x18,%esp0xb7ead426 <siglongjmp+6>:      mov    %ebx,-0xc(%ebp)0xb7ead429 <siglongjmp+9>:      call   0xb7e9828f <_Unwind_Find_FDE@plt+119>0xb7ead42e <siglongjmp+14>:     add    [+++]x12bbc6,%ebx0xb7ead434 <siglongjmp+20>:     mov    %esi,-0x8(%ebp)0xb7ead437 <siglongjmp+23>:     mov    0xc(%ebp),%esi0xb7ead43a <siglongjmp+26>:     mov    %edi,-0x4(%ebp)0xb7ead43d <siglongjmp+29>:     mov    0x8(%ebp),%edi0xb7ead440 <siglongjmp+32>:     mov    %esi,0x4(%esp)0xb7ead444 <siglongjmp+36>:     mov    %edi,(%esp)0xb7ead447 <siglongjmp+39>:     call   0xb7ead4d00xb7ead44c <siglongjmp+44>:     mov    0x18(%edi),%eax0xb7ead44f <siglongjmp+47>:     test   %eax,%eax0xb7ead451 <siglongjmp+49>:     jne    0xb7ead470 <siglongjmp+80>0xb7ead453 <siglongjmp+51>:     test   %esi,%esi0xb7ead455 <siglongjmp+53>:     mov    [+++]x1,%eax0xb7ead45a <siglongjmp+58>:     cmove  %eax,%esi0xb7ead45d <siglongjmp+61>:     mov    %esi,0x4(%esp)0xb7ead461 <siglongjmp+65>:     mov    %edi,(%esp)0xb7ead464 <siglongjmp+68>:     call   0xb7ead4900xb7ead469 <siglongjmp+73>:     lea    0x0(%esi,%eiz,1),%esi0xb7ead470 <siglongjmp+80>:     lea    0x1c(%edi),%eax0xb7ead473 <siglongjmp+83>:     movl   [+++]x0,0x8(%esp)0xb7ead47b <siglongjmp+91>:     mov    %eax,0x4(%esp)0xb7ead47f <siglongjmp+95>:     movl   [+++]x2,(%esp)0xb7ead486 <siglongjmp+102>:    call   0xb7ead890 <sigprocmask>0xb7ead48b <siglongjmp+107>:    jmp    0xb7ead453 <siglongjmp+51>

有人可以简单地向我解释一下代码,或者指出我在哪里可以找到系统中的源代码?

解决方法 大多数情况下,它会恢复寄存器和堆栈,就像它们在相应的setjmp()时一样.需要一些额外的清理(修复信号处理和展开挂起的堆栈处理程序),以及返回一个不同的值作为setjmp的表观返回值,但恢复状态是 *** 作的本质.

为了使它工作,堆栈不能低于调用setjmp的点. Longjmp是一种野蛮的方式,只需将调用堆栈(或函数调用嵌套序列)中调用的所有内容调用到同一级别,通常只需将堆栈指针设置为调用setjmp时的相同帧即可.

为了使它干净利落,longjmp()调用中间函数的所有退出处理程序,因此它们可以删除变量,以及在函数返回时通常执行的任何其他清理.将堆栈重置为深度较低的点会释放所有自动变量,但如果其中一个是file *,则需要关闭文件并释放i / o缓冲区.

总结

以上是内存溢出为你收集整理的c – longjmp如何工作?全部内容,希望文章能够帮你解决c – longjmp如何工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 2, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的. 我试图在gdb中disas代码,但我无法理解一些步骤.代码是: 0xb7ead420 <siglongjmp+0>: push %ebp0xb7ead421 <siglongjmp+1>: mov %esp,%ebp0xb7ead423 <siglongjmp+3>: s 我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的.

我试图在gdb中disas代码,但我无法理解一些步骤.代码是:

0xb7ead420 <siglongjmp+0>:      push   %ebp0xb7ead421 <siglongjmp+1>:      mov    %esp,%ebp0xb7ead423 <siglongjmp+3>:      sub    x18,%esp0xb7ead426 <siglongjmp+6>:      mov    %ebx,-0xc(%ebp)0xb7ead429 <siglongjmp+9>:      call   0xb7e9828f <_Unwind_Find_FDE@plt+119>0xb7ead42e <siglongjmp+14>:     add    [+++]x12bbc6,%ebx0xb7ead434 <siglongjmp+20>:     mov    %esi,-0x8(%ebp)0xb7ead437 <siglongjmp+23>:     mov    0xc(%ebp),%esi0xb7ead43a <siglongjmp+26>:     mov    %edi,-0x4(%ebp)0xb7ead43d <siglongjmp+29>:     mov    0x8(%ebp),%edi0xb7ead440 <siglongjmp+32>:     mov    %esi,0x4(%esp)0xb7ead444 <siglongjmp+36>:     mov    %edi,(%esp)0xb7ead447 <siglongjmp+39>:     call   0xb7ead4d00xb7ead44c <siglongjmp+44>:     mov    0x18(%edi),%eax0xb7ead44f <siglongjmp+47>:     test   %eax,%eax0xb7ead451 <siglongjmp+49>:     jne    0xb7ead470 <siglongjmp+80>0xb7ead453 <siglongjmp+51>:     test   %esi,%esi0xb7ead455 <siglongjmp+53>:     mov    [+++]x1,%eax0xb7ead45a <siglongjmp+58>:     cmove  %eax,%esi0xb7ead45d <siglongjmp+61>:     mov    %esi,0x4(%esp)0xb7ead461 <siglongjmp+65>:     mov    %edi,(%esp)0xb7ead464 <siglongjmp+68>:     call   0xb7ead4900xb7ead469 <siglongjmp+73>:     lea    0x0(%esi,%eiz,1),%esi0xb7ead470 <siglongjmp+80>:     lea    0x1c(%edi),%eax0xb7ead473 <siglongjmp+83>:     movl   [+++]x0,0x8(%esp)0xb7ead47b <siglongjmp+91>:     mov    %eax,0x4(%esp)0xb7ead47f <siglongjmp+95>:     movl   [+++]x2,(%esp)0xb7ead486 <siglongjmp+102>:    call   0xb7ead890 <sigprocmask>0xb7ead48b <siglongjmp+107>:    jmp    0xb7ead453 <siglongjmp+51>

有人可以简单地向我解释一下代码,或者指出我在哪里可以找到系统中的源代码?

解决方法 大多数情况下,它会恢复寄存器和堆栈,就像它们在相应的setjmp()时一样.需要一些额外的清理(修复信号处理和展开挂起的堆栈处理程序),以及返回一个不同的值作为setjmp的表观返回值,但恢复状态是 *** 作的本质.

为了使它工作,堆栈不能低于调用setjmp的点. Longjmp是一种野蛮的方式,只需将调用堆栈(或函数调用嵌套序列)中调用的所有内容调用到同一级别,通常只需将堆栈指针设置为调用setjmp时的相同帧即可.

为了使它干净利落,longjmp()调用中间函数的所有退出处理程序,因此它们可以删除变量,以及在函数返回时通常执行的任何其他清理.将堆栈重置为深度较低的点会释放所有自动变量,但如果其中一个是file *,则需要关闭文件并释放i / o缓冲区.

总结

以上是内存溢出为你收集整理的c – longjmp如何工作?全部内容,希望文章能够帮你解决c – longjmp如何工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 3, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的. 我试图在gdb中disas代码,但我无法理解一些步骤.代码是: 0xb7ead420 <siglongjmp+0>: push %ebp0xb7ead421 <siglongjmp+1>: mov %esp,%ebp0xb7ead423 <siglongjmp+3>: s 我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的.

我试图在gdb中disas代码,但我无法理解一些步骤.代码是:

0xb7ead420 <siglongjmp+0>:      push   %ebp0xb7ead421 <siglongjmp+1>:      mov    %esp,%ebp0xb7ead423 <siglongjmp+3>:      sub    x18,%esp0xb7ead426 <siglongjmp+6>:      mov    %ebx,-0xc(%ebp)0xb7ead429 <siglongjmp+9>:      call   0xb7e9828f <_Unwind_Find_FDE@plt+119>0xb7ead42e <siglongjmp+14>:     add    x12bbc6,%ebx0xb7ead434 <siglongjmp+20>:     mov    %esi,-0x8(%ebp)0xb7ead437 <siglongjmp+23>:     mov    0xc(%ebp),%esi0xb7ead43a <siglongjmp+26>:     mov    %edi,-0x4(%ebp)0xb7ead43d <siglongjmp+29>:     mov    0x8(%ebp),%edi0xb7ead440 <siglongjmp+32>:     mov    %esi,0x4(%esp)0xb7ead444 <siglongjmp+36>:     mov    %edi,(%esp)0xb7ead447 <siglongjmp+39>:     call   0xb7ead4d00xb7ead44c <siglongjmp+44>:     mov    0x18(%edi),%eax0xb7ead44f <siglongjmp+47>:     test   %eax,%eax0xb7ead451 <siglongjmp+49>:     jne    0xb7ead470 <siglongjmp+80>0xb7ead453 <siglongjmp+51>:     test   %esi,%esi0xb7ead455 <siglongjmp+53>:     mov    [+++]x1,%eax0xb7ead45a <siglongjmp+58>:     cmove  %eax,%esi0xb7ead45d <siglongjmp+61>:     mov    %esi,0x4(%esp)0xb7ead461 <siglongjmp+65>:     mov    %edi,(%esp)0xb7ead464 <siglongjmp+68>:     call   0xb7ead4900xb7ead469 <siglongjmp+73>:     lea    0x0(%esi,%eiz,1),%esi0xb7ead470 <siglongjmp+80>:     lea    0x1c(%edi),%eax0xb7ead473 <siglongjmp+83>:     movl   [+++]x0,0x8(%esp)0xb7ead47b <siglongjmp+91>:     mov    %eax,0x4(%esp)0xb7ead47f <siglongjmp+95>:     movl   [+++]x2,(%esp)0xb7ead486 <siglongjmp+102>:    call   0xb7ead890 <sigprocmask>0xb7ead48b <siglongjmp+107>:    jmp    0xb7ead453 <siglongjmp+51>

有人可以简单地向我解释一下代码,或者指出我在哪里可以找到系统中的源代码?

解决方法 大多数情况下,它会恢复寄存器和堆栈,就像它们在相应的setjmp()时一样.需要一些额外的清理(修复信号处理和展开挂起的堆栈处理程序),以及返回一个不同的值作为setjmp的表观返回值,但恢复状态是 *** 作的本质.

为了使它工作,堆栈不能低于调用setjmp的点. Longjmp是一种野蛮的方式,只需将调用堆栈(或函数调用嵌套序列)中调用的所有内容调用到同一级别,通常只需将堆栈指针设置为调用setjmp时的相同帧即可.

为了使它干净利落,longjmp()调用中间函数的所有退出处理程序,因此它们可以删除变量,以及在函数返回时通常执行的任何其他清理.将堆栈重置为深度较低的点会释放所有自动变量,但如果其中一个是file *,则需要关闭文件并释放i / o缓冲区.

总结

以上是内存溢出为你收集整理的c – longjmp如何工作?全部内容,希望文章能够帮你解决c – longjmp如何工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的. 我试图在gdb中disas代码,但我无法理解一些步骤.代码是: 0xb7ead420 <siglongjmp+0>: push %ebp0xb7ead421 <siglongjmp+1>: mov %esp,%ebp0xb7ead423 <siglongjmp+3>: s 我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的.

我试图在gdb中disas代码,但我无法理解一些步骤.代码是:

0xb7ead420 <siglongjmp+0>:      push   %ebp0xb7ead421 <siglongjmp+1>:      mov    %esp,%ebp0xb7ead423 <siglongjmp+3>:      sub    x18,%esp0xb7ead426 <siglongjmp+6>:      mov    %ebx,-0xc(%ebp)0xb7ead429 <siglongjmp+9>:      call   0xb7e9828f <_Unwind_Find_FDE@plt+119>0xb7ead42e <siglongjmp+14>:     add    x12bbc6,%ebx0xb7ead434 <siglongjmp+20>:     mov    %esi,-0x8(%ebp)0xb7ead437 <siglongjmp+23>:     mov    0xc(%ebp),%esi0xb7ead43a <siglongjmp+26>:     mov    %edi,-0x4(%ebp)0xb7ead43d <siglongjmp+29>:     mov    0x8(%ebp),%edi0xb7ead440 <siglongjmp+32>:     mov    %esi,0x4(%esp)0xb7ead444 <siglongjmp+36>:     mov    %edi,(%esp)0xb7ead447 <siglongjmp+39>:     call   0xb7ead4d00xb7ead44c <siglongjmp+44>:     mov    0x18(%edi),%eax0xb7ead44f <siglongjmp+47>:     test   %eax,%eax0xb7ead451 <siglongjmp+49>:     jne    0xb7ead470 <siglongjmp+80>0xb7ead453 <siglongjmp+51>:     test   %esi,%esi0xb7ead455 <siglongjmp+53>:     mov    x1,%eax0xb7ead45a <siglongjmp+58>:     cmove  %eax,%esi0xb7ead45d <siglongjmp+61>:     mov    %esi,0x4(%esp)0xb7ead461 <siglongjmp+65>:     mov    %edi,(%esp)0xb7ead464 <siglongjmp+68>:     call   0xb7ead4900xb7ead469 <siglongjmp+73>:     lea    0x0(%esi,%eiz,1),%esi0xb7ead470 <siglongjmp+80>:     lea    0x1c(%edi),%eax0xb7ead473 <siglongjmp+83>:     movl   [+++]x0,0x8(%esp)0xb7ead47b <siglongjmp+91>:     mov    %eax,0x4(%esp)0xb7ead47f <siglongjmp+95>:     movl   [+++]x2,(%esp)0xb7ead486 <siglongjmp+102>:    call   0xb7ead890 <sigprocmask>0xb7ead48b <siglongjmp+107>:    jmp    0xb7ead453 <siglongjmp+51>

有人可以简单地向我解释一下代码,或者指出我在哪里可以找到系统中的源代码?

解决方法 大多数情况下,它会恢复寄存器和堆栈,就像它们在相应的setjmp()时一样.需要一些额外的清理(修复信号处理和展开挂起的堆栈处理程序),以及返回一个不同的值作为setjmp的表观返回值,但恢复状态是 *** 作的本质.

为了使它工作,堆栈不能低于调用setjmp的点. Longjmp是一种野蛮的方式,只需将调用堆栈(或函数调用嵌套序列)中调用的所有内容调用到同一级别,通常只需将堆栈指针设置为调用setjmp时的相同帧即可.

为了使它干净利落,longjmp()调用中间函数的所有退出处理程序,因此它们可以删除变量,以及在函数返回时通常执行的任何其他清理.将堆栈重置为深度较低的点会释放所有自动变量,但如果其中一个是file *,则需要关闭文件并释放i / o缓冲区.

总结

以上是内存溢出为你收集整理的c – longjmp如何工作?全部内容,希望文章能够帮你解决c – longjmp如何工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 5, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的. 我试图在gdb中disas代码,但我无法理解一些步骤.代码是: 0xb7ead420 <siglongjmp+0>: push %ebp0xb7ead421 <siglongjmp+1>: mov %esp,%ebp0xb7ead423 <siglongjmp+3>: s 我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的.

我试图在gdb中disas代码,但我无法理解一些步骤.代码是:

0xb7ead420 <siglongjmp+0>:      push   %ebp0xb7ead421 <siglongjmp+1>:      mov    %esp,%ebp0xb7ead423 <siglongjmp+3>:      sub    x18,%esp0xb7ead426 <siglongjmp+6>:      mov    %ebx,-0xc(%ebp)0xb7ead429 <siglongjmp+9>:      call   0xb7e9828f <_Unwind_Find_FDE@plt+119>0xb7ead42e <siglongjmp+14>:     add    x12bbc6,%ebx0xb7ead434 <siglongjmp+20>:     mov    %esi,-0x8(%ebp)0xb7ead437 <siglongjmp+23>:     mov    0xc(%ebp),%esi0xb7ead43a <siglongjmp+26>:     mov    %edi,-0x4(%ebp)0xb7ead43d <siglongjmp+29>:     mov    0x8(%ebp),%edi0xb7ead440 <siglongjmp+32>:     mov    %esi,0x4(%esp)0xb7ead444 <siglongjmp+36>:     mov    %edi,(%esp)0xb7ead447 <siglongjmp+39>:     call   0xb7ead4d00xb7ead44c <siglongjmp+44>:     mov    0x18(%edi),%eax0xb7ead44f <siglongjmp+47>:     test   %eax,%eax0xb7ead451 <siglongjmp+49>:     jne    0xb7ead470 <siglongjmp+80>0xb7ead453 <siglongjmp+51>:     test   %esi,%esi0xb7ead455 <siglongjmp+53>:     mov    x1,%eax0xb7ead45a <siglongjmp+58>:     cmove  %eax,%esi0xb7ead45d <siglongjmp+61>:     mov    %esi,0x4(%esp)0xb7ead461 <siglongjmp+65>:     mov    %edi,(%esp)0xb7ead464 <siglongjmp+68>:     call   0xb7ead4900xb7ead469 <siglongjmp+73>:     lea    0x0(%esi,%eiz,1),%esi0xb7ead470 <siglongjmp+80>:     lea    0x1c(%edi),%eax0xb7ead473 <siglongjmp+83>:     movl   x0,0x8(%esp)0xb7ead47b <siglongjmp+91>:     mov    %eax,0x4(%esp)0xb7ead47f <siglongjmp+95>:     movl   [+++]x2,(%esp)0xb7ead486 <siglongjmp+102>:    call   0xb7ead890 <sigprocmask>0xb7ead48b <siglongjmp+107>:    jmp    0xb7ead453 <siglongjmp+51>

有人可以简单地向我解释一下代码,或者指出我在哪里可以找到系统中的源代码?

解决方法 大多数情况下,它会恢复寄存器和堆栈,就像它们在相应的setjmp()时一样.需要一些额外的清理(修复信号处理和展开挂起的堆栈处理程序),以及返回一个不同的值作为setjmp的表观返回值,但恢复状态是 *** 作的本质.

为了使它工作,堆栈不能低于调用setjmp的点. Longjmp是一种野蛮的方式,只需将调用堆栈(或函数调用嵌套序列)中调用的所有内容调用到同一级别,通常只需将堆栈指针设置为调用setjmp时的相同帧即可.

为了使它干净利落,longjmp()调用中间函数的所有退出处理程序,因此它们可以删除变量,以及在函数返回时通常执行的任何其他清理.将堆栈重置为深度较低的点会释放所有自动变量,但如果其中一个是file *,则需要关闭文件并释放i / o缓冲区.

总结

以上是内存溢出为你收集整理的c – longjmp如何工作?全部内容,希望文章能够帮你解决c – longjmp如何工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
c – longjmp如何工作?_C_内存溢出

c – longjmp如何工作?

c – longjmp如何工作?,第1张

概述我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的. 我试图在gdb中disas代码,但我无法理解一些步骤.代码是: 0xb7ead420 <siglongjmp+0>: push %ebp0xb7ead421 <siglongjmp+1>: mov %esp,%ebp0xb7ead423 <siglongjmp+3>: s 我需要了解longjmp函数如何工作;我知道它的作用,但我需要知道它是如何做到的.

我试图在gdb中disas代码,但我无法理解一些步骤.代码是:

0xb7ead420 <siglongjmp+0>:      push   %ebp0xb7ead421 <siglongjmp+1>:      mov    %esp,%ebp0xb7ead423 <siglongjmp+3>:      sub    x18,%esp0xb7ead426 <siglongjmp+6>:      mov    %ebx,-0xc(%ebp)0xb7ead429 <siglongjmp+9>:      call   0xb7e9828f <_Unwind_Find_FDE@plt+119>0xb7ead42e <siglongjmp+14>:     add    x12bbc6,%ebx0xb7ead434 <siglongjmp+20>:     mov    %esi,-0x8(%ebp)0xb7ead437 <siglongjmp+23>:     mov    0xc(%ebp),%esi0xb7ead43a <siglongjmp+26>:     mov    %edi,-0x4(%ebp)0xb7ead43d <siglongjmp+29>:     mov    0x8(%ebp),%edi0xb7ead440 <siglongjmp+32>:     mov    %esi,0x4(%esp)0xb7ead444 <siglongjmp+36>:     mov    %edi,(%esp)0xb7ead447 <siglongjmp+39>:     call   0xb7ead4d00xb7ead44c <siglongjmp+44>:     mov    0x18(%edi),%eax0xb7ead44f <siglongjmp+47>:     test   %eax,%eax0xb7ead451 <siglongjmp+49>:     jne    0xb7ead470 <siglongjmp+80>0xb7ead453 <siglongjmp+51>:     test   %esi,%esi0xb7ead455 <siglongjmp+53>:     mov    x1,%eax0xb7ead45a <siglongjmp+58>:     cmove  %eax,%esi0xb7ead45d <siglongjmp+61>:     mov    %esi,0x4(%esp)0xb7ead461 <siglongjmp+65>:     mov    %edi,(%esp)0xb7ead464 <siglongjmp+68>:     call   0xb7ead4900xb7ead469 <siglongjmp+73>:     lea    0x0(%esi,%eiz,1),%esi0xb7ead470 <siglongjmp+80>:     lea    0x1c(%edi),%eax0xb7ead473 <siglongjmp+83>:     movl   x0,0x8(%esp)0xb7ead47b <siglongjmp+91>:     mov    %eax,0x4(%esp)0xb7ead47f <siglongjmp+95>:     movl   x2,(%esp)0xb7ead486 <siglongjmp+102>:    call   0xb7ead890 <sigprocmask>0xb7ead48b <siglongjmp+107>:    jmp    0xb7ead453 <siglongjmp+51>

有人可以简单地向我解释一下代码,或者指出我在哪里可以找到系统中的源代码?

解决方法 大多数情况下,它会恢复寄存器和堆栈,就像它们在相应的setjmp()时一样.需要一些额外的清理(修复信号处理和展开挂起的堆栈处理程序),以及返回一个不同的值作为setjmp的表观返回值,但恢复状态是 *** 作的本质.

为了使它工作,堆栈不能低于调用setjmp的点. Longjmp是一种野蛮的方式,只需将调用堆栈(或函数调用嵌套序列)中调用的所有内容调用到同一级别,通常只需将堆栈指针设置为调用setjmp时的相同帧即可.

为了使它干净利落,longjmp()调用中间函数的所有退出处理程序,因此它们可以删除变量,以及在函数返回时通常执行的任何其他清理.将堆栈重置为深度较低的点会释放所有自动变量,但如果其中一个是file *,则需要关闭文件并释放i / o缓冲区.

总结

以上是内存溢出为你收集整理的c – longjmp如何工作?全部内容,希望文章能够帮你解决c – longjmp如何工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存