Стек, Разбивающий попытку, дающую segfault

То, что происходит, это то, что вы создаете новый Promise и возвращаете его, но вы не ожидаете его разрешения. Вы можете использовать then нового async/await syntax, чтобы получить правильный результат:

onSubmit = async values => {
    const inputs = Object.assign({}, values);
    return await this.props.dispatch(callSearchGiftsAPI(inputs));
}

Приведенный выше код будет работать с вашим первым методом.

Поскольку ваш второй метод ничего не возвращает, вы никогда не получите свой результат, вам необходимо вернуть результат fetch и применить код, который я дал выше:

return fetch(url, {
26
задан Ethan Heilman 20 March 2012 в 19:43
поделиться

5 ответов

'символ' на каждой архитектуре, которую я использовал, 8 битов шириной независимо от того, является ли это микро 8 битами, микро 16 битов, ПК на 32 бита или новый ПК на 64 бита. Интервал, с другой стороны, имеет тенденцию быть размером слова.

порядок, который местные жители поставлены стек, может быть конкретной реализацией. Мое предположение - то, что Ваш компилятор помещает "интервал *, мочат" на стеке перед "символьный буфер 1 ". Так, для получения до обратного адреса мы должны пройти "символьный буфер 1 " (1 байт), "интервал *мочит" (8 байтов), и сохраненный указатель базы (8 байтов) для в общей сложности 17 байтов.

Вот описание стекового фрейма на 64-разрядном x86: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-035-computer-language-engineering-spring-2010/projects/x86-64

13
ответ дан vonbrand 28 November 2019 в 17:16
поделиться

Шаг посредством дизассемблирования в gdb (демонтируют, stepi, nexti) и смотрит на регистры на каждом шаге (информационные регистры).

Здесь, как можно ступить посредством дизассемблирования:

gdb ./myprogram
break main
run
display/4i $eip
stepi
stepi
...
info registers
...

необходимо также знать (Вы, вероятно, уже делаете, учитывая, что Вы получили часть его работа), что на многих дистрибутивах, средство защиты стека включено по умолчанию в gcc. Можно вручную отключить его с -fno-stack-protector.

9
ответ дан Shog9 28 November 2019 в 17:16
поделиться

Кроме (или еще лучше, в дополнение к) выполнение отладчика, можно также использовать printf "%p" конструкция для печати адресов переменных, например:

printf("buf: %p\n", buffer); //&buffer[0] works too; &buffer works for an array
printf("ret: %p\n", &ret):
printf("a:   %p\n", &a);

Печать адресов различных вещей может дать большое понимание, как Ваш компилятор/реализация располагает вещи в фоновом режиме. И можно сделать это непосредственно из кода C, также!

0
ответ дан aib 28 November 2019 в 17:16
поделиться

С этим огромным количеством стэков ваш лучший друг - gdb . Поскольку вы уже segfaulting, вы уже пишете память, которой вы не должны быть (хороший знак). Более эффективный способ сделать это правильно - изменить адрес возврата на другой, который является действительным адресом (например, на адрес func или на какой-либо полученный шелл-код). Отличным ресурсом, который я бы порекомендовал, является Руководство по Shellcoder's Handbook , но, поскольку вы работаете с 64-битной архитектурой, многие примеры требуют небольшой работы, чтобы начать работу.

3
ответ дан Chris Bunch 28 November 2019 в 17:16
поделиться

Подумайте над тем, чтобы взглянуть на метод заимствованного фрагмента кода стелса , если вы заинтересованы в использовании переполнения буфера x64.

0
ответ дан 28 November 2019 в 17:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: