Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Где здесь эта функция?


Автор: ТарасАтавин 15.9.2013, 05:02
Код
#include <iostream>
signed long int x;
void input()
{
 std::cin>>x;
}
int main ()
{
 input();
 return 0;
}
. Где здесь: 
Код
    .file    "Test.cpp"
    .text
    .p2align 2,,3
    .def    ___tcf_0;    .scl    3;    .type    32;    .endef
___tcf_0:
LFB987:
    .cfi_startproc
    subl    $28, %esp
    .cfi_def_cfa_offset 32
    movl    $__ZStL8__ioinit, (%esp)
    call    __ZNSt8ios_base4InitD1Ev
    addl    $28, %esp
    .cfi_def_cfa_offset 4
    ret
    .cfi_endproc
LFE987:
    .p2align 2,,3
    .globl    __Z5inputv
    .def    __Z5inputv;    .scl    2;    .type    32;    .endef
__Z5inputv:
LFB983:
    .cfi_startproc
    subl    $28, %esp
    .cfi_def_cfa_offset 32
    movl    $_x, 4(%esp)
    movl    $__ZSt3cin, (%esp)
    call    __ZNSi10_M_extractIlEERSiRT_
    addl    $28, %esp
    .cfi_def_cfa_offset 4
    ret
    .cfi_endproc
LFE983:
    .def    ___main;    .scl    2;    .type    32;    .endef
    .section    .text.startup,"x"
    .p2align 2,,3
    .globl    _main
    .def    _main;    .scl    2;    .type    32;    .endef
_main:
LFB984:
    .cfi_startproc
    pushl    %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    andl    $-16, %esp
    call    ___main
    call    __Z5inputv
    xorl    %eax, %eax
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
LFE984:
    .p2align 2,,3
    .def    __GLOBAL__sub_I_x;    .scl    3;    .type    32;    .endef
__GLOBAL__sub_I_x:
LFB988:
    .cfi_startproc
    subl    $28, %esp
    .cfi_def_cfa_offset 32
    movl    $__ZStL8__ioinit, (%esp)
    call    __ZNSt8ios_base4InitC1Ev
    movl    $___tcf_0, (%esp)
    call    _atexit
    addl    $28, %esp
    .cfi_def_cfa_offset 4
    ret
    .cfi_endproc
LFE988:
    .section    .ctors,"w"
    .align 4
    .long    __GLOBAL__sub_I_x
    .globl    _x
    .bss
    .align 4
_x:
    .space 4
.lcomm __ZStL8__ioinit,1,1
    .def    __ZNSt8ios_base4InitD1Ev;    .scl    2;    .type    32;    .endef
    .def    __ZNSi10_M_extractIlEERSiRT_;    .scl    2;    .type    32;    .endef
    .def    __ZNSt8ios_base4InitC1Ev;    .scl    2;    .type    32;    .endef
    .def    _atexit;    .scl    2;    .type    32;    .endef
 функция input и какие операции соответствуют строке 
Код
std::cin>>x;
?

Автор: RockManiakForever 15.9.2013, 13:45
Дык тут -> __Z5inputv:
и тут ->   call    __Z5inputv


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//Где-здесь-эта-функция-id52351557ae2015e337000000#findElement_E7045_52358fc9ae2015976f0006e1_0

Автор: ТарасАтавин 15.9.2013, 19:28
Цитата(RockManiakForever @  15.9.2013,  13:45 Найти цитируемый пост)
call    __Z5inputv
Это вызов. А сама где?

Добавлено через 1 минуту и 52 секунды
Что здесь: 
Код
call    __ZNSi10_M_extractIlEERSiRT_
 вызывается?

Автор: JamesDean 15.9.2013, 23:53
Читай внемательней.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//Где-здесь-эта-функция-id52351557ae2015e337000000#findElement_E7045_52361e57ae20159966000246_0

Автор: LeonidPr 16.9.2013, 10:26
Функция input начинается на 20-й строке и кончается на 30-й стоке вашего листинга, а строке
Код

std::cin>>x;

соответствуют строки
Код

    movl    $_x, 4(%esp)
    movl    $__ZSt3cin, (%esp)
    call    __ZNSi10_M_extractIlEERSiRT_

Автор: ТарасАтавин 16.9.2013, 10:28
Эйси. А что за функция __ZNSi10_M_extractIlEERSiRT_? Она APIшная?

Автор: JamesDean 16.9.2013, 12:47
Да.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//Где-здесь-эта-функция-id52351557ae2015e337000000#findElement_E7045_5236d3bcae20154a790015a4_0

Автор: ТарасАтавин 16.9.2013, 13:01
А что она вообще значит? И совпадает ли её имя в x64?

Автор: JamesDean 16.9.2013, 13:18
Цитата (ТарасАтавин)
А что она вообще значит?

Я вообще не С'ишник, но это функция получения ввода данных от пользователя, в переменную x, насколько я знаю.  
Код

std::cin>>x;
Функция cin является стандартной функцией динамической библиотеки LibC.

Цитата (ТарасАтавин)
И совпадает ли её имя в x64?

Понятия не имею, ибо x64 не пользуюсь.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//Где-здесь-эта-функция-id52351557ae2015e337000000#findElement_E7045_5236dae4ae20153760002230_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)