亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? c-stack.c

?? Linux下文件工具。
?? C
字號:
/* Stack overflow handling.   Copyright (C) 2002 Free Software Foundation, Inc.   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2, or (at your option)   any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software Foundation,   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *//* Written by Paul Eggert.  *//* NOTES:   A program that uses alloca, dynamic arrays, or large local   variables may extend the stack by more than a page at a time.  If   so, when the stack overflows the operating system may not detect   the overflow until the program uses the array, and this module may   incorrectly report a program error instead of a stack overflow.   To avoid this problem, allocate only small objects on the stack; a   program should be OK if it limits single allocations to a page or   less.  Allocate larger arrays in static storage, or on the heap   (e.g., with malloc).  Yes, this is a pain, but we don't know of any   better solution that is portable.   No attempt has been made to deal with multithreaded applications.   If ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC, the current implementation   assumes that, if the RLIMIT_STACK limit changes during execution,   then c_stack_action is invoked immediately afterwards.  */#if HAVE_CONFIG_H# include <config.h>#endif#ifndef __attribute__# if __GNUC__ < 3 || __STRICT_ANSI__#  define __attribute__(x)# endif#endif#include "gettext.h"#define _(msgid) gettext (msgid)#include <errno.h>#ifndef ENOTSUP# define ENOTSUP EINVAL#endif#ifndef EOVERFLOW# define EOVERFLOW EINVAL#endif#include <signal.h>#if ! HAVE_STACK_T && ! defined stack_ttypedef struct sigaltstack stack_t;#endif#include <stdlib.h>#include <string.h>#if HAVE_SYS_RESOURCE_H/* Include sys/time.h here, because...   SunOS-4.1.x <sys/resource.h> fails to include <sys/time.h>.   This gives "incomplete type" errors for ru_utime and tu_stime.  */# if HAVE_SYS_TIME_H#  include <sys/time.h># endif# include <sys/resource.h>#endif#if HAVE_UCONTEXT_H# include <ucontext.h>#endif#if HAVE_UNISTD_H# include <unistd.h>#endif#ifndef STDERR_FILENO# define STDERR_FILENO 2#endif#if DEBUG# include <stdio.h>#endif#include "c-stack.h"#include "exitfail.h"extern char *program_name;/* The user-specified action to take when a SEGV-related program error   or stack overflow occurs.  */static void (* volatile segv_action) (int);/* Translated messages for program errors and stack overflow.  Do not   translate them in the signal handler, since gettext is not   async-signal-safe.  */static char const * volatile program_error_message;static char const * volatile stack_overflow_message;/* Output an error message, then exit with status EXIT_FAILURE if it   appears to have been a stack overflow, or with a core dump   otherwise.  This function is async-signal-safe.  */static void die (int) __attribute__ ((noreturn));static voiddie (int signo){  char const *message =    signo ? program_error_message : stack_overflow_message;  segv_action (signo);  write (STDERR_FILENO, program_name, strlen (program_name));  write (STDERR_FILENO, ": ", 2);  write (STDERR_FILENO, message, strlen (message));  write (STDERR_FILENO, "\n", 1);  if (! signo)    _exit (exit_failure);  kill (getpid (), signo);  abort ();}#if HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK/* Direction of the C runtime stack.  This function is   async-signal-safe.  */# if STACK_DIRECTION#  define find_stack_direction(ptr) STACK_DIRECTION# elsestatic intfind_stack_direction (char const *addr){  char dummy;  return ! addr ? find_stack_direction (&dummy) : addr < &dummy ? 1 : -1;}# endif# if HAVE_XSI_STACK_OVERFLOW_HEURISTIC#  define get_stack_location(argv) 0# else#  if defined RLIMIT_STACK && defined _SC_PAGESIZE/* Return the minimum machine address deducible from ARGV.  This   includes the addresses of all the strings that ARGV points at, as   well as the address of ARGV itself.  */static char const *min_address_from_argv (char * const *argv){  char const *min = (char const *) argv;  char const *p;  while ((p = *argv++))    if (p < min)      min = p;  return min;}/* Return the maximum machine address deducible from ARGV.  */static char const *max_address_from_argv (char * const *argv){  char const *max = *argv;  char const *max1;  char const *p;  while ((p = *argv++))    if (max < p)      max = p;  max1 = (char const *) (argv + 1);  return max && max1 < max ? max + strlen (max) + 1 : max1;}#  endif/* The base and size of the stack, determined at startup.  */static char const * volatile stack_base;static size_t volatile stack_size;/* Store the base and size of the stack into the static variables   STACK_BASE and STACK_SIZE.  The base is the numerically lowest   address in the stack.  Return -1 (setting errno) if this cannot be   done.  */static intget_stack_location (char * const *argv){#  if ! (defined RLIMIT_STACK && defined _SC_PAGESIZE)  errno = ENOTSUP;  return -1;#  else  struct rlimit rlimit;  int r = getrlimit (RLIMIT_STACK, &rlimit);  if (r == 0)    {      char const *base;      size_t size = rlimit.rlim_cur;      extern char **environ;      size_t page_size = sysconf (_SC_PAGESIZE);      int stack_direction = find_stack_direction (0);#   if HAVE_GETCONTEXT && HAVE_DECL_GETCONTEXT      ucontext_t context;      if (getcontext (&context) == 0)	{	  base = context.uc_stack.ss_sp;	  if (stack_direction < 0)	    base -= size - context.uc_stack.ss_size;	}      else#   endif	{	  if (stack_direction < 0)	    {	      char const *a = max_address_from_argv (argv);	      char const *b = max_address_from_argv (environ);	      base = (a < b ? b : a) - size;	      base += - (size_t) base % page_size;	    }	  else	    {	      char const *a = min_address_from_argv (argv);	      char const *b = min_address_from_argv (environ);	      base = a < b ? a : b;	      base -= (size_t) base % page_size;	    }	}      if (size != rlimit.rlim_cur	  || rlimit.rlim_cur < 0	  || base + size < base#   ifdef RLIM_SAVED_CUR	  || rlimit.rlim_cur == RLIM_SAVED_CUR#   endif#   ifdef RLIM_SAVED_MAX	  || rlimit.rlim_cur == RLIM_SAVED_MAX#   endif#   ifdef RLIM_INFINITY	  || rlimit.rlim_cur == RLIM_INFINITY#   endif	  )	{	  errno = EOVERFLOW;	  return -1;	}      stack_base = base;      stack_size = size;#   if DEBUG      fprintf (stderr, "get_stack_location base=%p size=%lx\n",	       base, (unsigned long) size);#   endif    }  return r;#  endif}# endif/* Storage for the alternate signal stack.  */static union{  char buffer[SIGSTKSZ];  /* These other members are for proper alignment.  There's no     standard way to guarantee stack alignment, but this seems enough     in practice.  */  long double ld;  long l;  void *p;} alternate_signal_stack;# if defined SA_ONSTACK && defined SA_SIGINFO && defined _SC_PAGESIZE/* Handle a segmentation violation and exit.  This function is   async-signal-safe.  */static void segv_handler (int, siginfo_t *, void *) __attribute__((noreturn));static voidsegv_handler (int signo, siginfo_t *info,	      void *context __attribute__ ((unused))){  /* Clear SIGNO if it seems to have been a stack overflow.  */  if (0 < info->si_code)    {      /* If the faulting address is within the stack, or within one	 page of the stack end, assume that it is a stack	 overflow.  */#  if HAVE_XSI_STACK_OVERFLOW_HEURISTIC      ucontext_t const *user_context = context;      char const *stack_base = user_context->uc_stack.ss_sp;      size_t stack_size = user_context->uc_stack.ss_size;#  endif      char const *faulting_address = info->si_addr;      size_t s = faulting_address - stack_base;      size_t page_size = sysconf (_SC_PAGESIZE);      if (find_stack_direction (0) < 0)	s += page_size;      if (s < stack_size + page_size)	signo = 0;#  if DEBUG      {	char buf[1024];	sprintf (buf,		 "segv_handler fault=%p base=%p size=%lx page=%lx signo=%d\n",		 faulting_address, stack_base, (unsigned long) stack_size,		 (unsigned long) page_size, signo);	write (STDERR_FILENO, buf, strlen (buf));      }#  endif    }  die (signo);}# endifstatic voidnull_action (int signo __attribute__ ((unused))){}/* Assuming ARGV is the argument vector of `main', set up ACTION so   that it is invoked on C stack overflow.  Return -1 (setting errno)   if this cannot be done.   When ACTION is called, it is passed an argument equal to SIGSEGV   for a segmentation violation that does not appear related to stack   overflow, and is passed zero otherwise.   A null ACTION acts like an action that does nothing.   ACTION must be async-signal-safe.  ACTION together with its callees   must not require more than SIGSTKSZ bytes of stack space.  */intc_stack_action (char * const *argv __attribute__ ((unused)),		void (*action) (int)){  int r = get_stack_location (argv);  if (r != 0)    return r;  {    stack_t st;    st.ss_flags = 0;    st.ss_sp = alternate_signal_stack.buffer;    st.ss_size = sizeof alternate_signal_stack.buffer;    r = sigaltstack (&st, 0);    if (r != 0)      return r;  }  segv_action = action ? action : null_action;  program_error_message = _("program error");  stack_overflow_message = _("stack overflow");  {# if ! (defined SA_ONSTACK && defined SA_SIGINFO && defined _SC_PAGESIZE)    return signal (SIGSEGV, die) == SIG_ERR ? -1 : 0;# else    struct sigaction act;    sigemptyset (&act.sa_mask);    /* POSIX 1003.1-2001 says SA_RESETHAND implies SA_NODEFER, but       this is not true on Solaris 8 at least.  It doesn't hurt to use       SA_NODEFER here, so leave it in.  */    act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO;    act.sa_sigaction = segv_handler;    return sigaction (SIGSEGV, &act, 0);# endif  }}#else /* ! (HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK) */intc_stack_action (char * const *argv __attribute__ ((unused)),		void (*action) (int)  __attribute__ ((unused))){  errno = ENOTSUP;  return -1;}#endif#if DEBUGint volatile exit_failure;static longrecurse (char *p){  char array[500];  array[0] = 1;  return *p + recurse (array);}char *program_name;intmain (int argc __attribute__ ((unused)), char **argv){  program_name = argv[0];  fprintf (stderr, "The last line of output should be \"stack overflow\".\n");  if (c_stack_action (argv, 0) == 0)    return recurse ("\1");  perror ("c_stack_action");  return 1;}#endif /* DEBUG *//*Local Variables:compile-command: "gcc -DDEBUG -DHAVE_CONFIG_H -I.. -g -O -Wall -W c-stack.c"End:*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲va欧美va人人爽| 久久99精品久久久久婷婷| 成人精品国产福利| 精品国产露脸精彩对白| 亚洲va韩国va欧美va| 91福利国产精品| 亚洲黄一区二区三区| 99久久久久久| 亚洲私人黄色宅男| 97se狠狠狠综合亚洲狠狠| 国产精品不卡视频| 99精品视频在线观看免费| 一区二区中文字幕在线| a4yy欧美一区二区三区| 日韩美女视频一区| 色婷婷一区二区| 亚洲综合激情另类小说区| 在线视频你懂得一区| 亚洲国产精品一区二区尤物区| 欧美综合一区二区| 亚洲国产一二三| 3d动漫精品啪啪1区2区免费| 日韩av中文字幕一区二区三区| 日韩欧美高清在线| 国产乱码精品一区二区三区av| 国产日韩欧美精品综合| av电影在线观看完整版一区二区| 136国产福利精品导航| 在线亚洲+欧美+日本专区| 亚洲成年人影院| 欧美一区二区三区精品| 极品少妇一区二区三区精品视频| 国产三级精品视频| 99久久精品一区二区| 亚洲一区av在线| 制服丝袜亚洲色图| 国产原创一区二区| 一区在线观看视频| 欧美日韩不卡一区| 激情综合色综合久久| 日本一区二区在线不卡| 91豆麻精品91久久久久久| 肉肉av福利一精品导航| 久久久久一区二区三区四区| 成a人片亚洲日本久久| 亚洲成人免费电影| 久久亚洲欧美国产精品乐播| 99视频国产精品| 亚洲成人精品在线观看| 欧美精品一区二区三区蜜桃视频| 成人黄色大片在线观看| 亚洲成人av资源| 久久久影院官网| 欧美综合一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 国产精品麻豆久久久| 欧美日韩一区二区三区不卡| 另类人妖一区二区av| 国产欧美日本一区二区三区| 91成人国产精品| 极品美女销魂一区二区三区| 亚洲欧美一区二区三区孕妇| 337p亚洲精品色噜噜| 成人激情校园春色| 性做久久久久久久免费看| 久久久久久免费网| 欧美午夜不卡视频| 国产另类ts人妖一区二区| 一区二区三区电影在线播| 日韩一区二区精品在线观看| av电影在线观看不卡| 久久99精品一区二区三区三区| 中文字幕一区二区三区色视频| 在线播放欧美女士性生活| 成人午夜电影小说| 日本不卡视频一二三区| 日韩码欧中文字| 精品精品国产高清a毛片牛牛| 色妹子一区二区| 国产一区二区三区最好精华液| 亚洲一区在线观看免费| 国产亚洲精品aa午夜观看| 欧美伊人久久大香线蕉综合69 | 国产欧美va欧美不卡在线| 精品视频999| 精品一区二区三区在线播放视频| 精品入口麻豆88视频| 欧美性猛交xxxx黑人交| 欧美亚洲一区二区在线| 捆绑紧缚一区二区三区视频| 一区二区三区在线播| 国产女同性恋一区二区| 91精品视频网| 色哟哟一区二区在线观看| 青青草精品视频| 亚洲人成小说网站色在线| 久久久不卡影院| 精品国产免费一区二区三区四区| 欧美日韩专区在线| 色综合天天做天天爱| 国产成人精品在线看| 国内一区二区视频| 青青国产91久久久久久| 亚洲国产视频一区| 一区二区三区在线视频免费观看| 欧美国产丝袜视频| 久久久三级国产网站| 精品国产电影一区二区| 日韩午夜在线观看视频| 欧美日韩国产另类不卡| 欧美日韩在线播| 日本韩国视频一区二区| 99精品视频在线观看免费| 成人禁用看黄a在线| 成人免费视频一区| 国产成人精品影院| 粉嫩嫩av羞羞动漫久久久| 韩国一区二区视频| 精品亚洲免费视频| 韩国女主播一区| 黄网站免费久久| 久久成人久久鬼色| 精品一二三四区| 韩国av一区二区| 国产麻豆精品在线| 国产精品88av| 丁香网亚洲国际| 高清国产午夜精品久久久久久| 国产精品伊人色| 国产91精品精华液一区二区三区 | 色婷婷久久久亚洲一区二区三区 | 波多野结衣精品在线| 国产99精品国产| 成人永久免费视频| 不卡的av网站| 91蜜桃在线观看| 色婷婷av久久久久久久| 欧亚一区二区三区| 欧美高清性hdvideosex| 欧美一级黄色录像| 精品黑人一区二区三区久久| 久久综合久久鬼色| 国产日韩欧美精品在线| 国产精品久久久久久妇女6080| 亚洲人成在线播放网站岛国| 亚洲最快最全在线视频| 午夜激情一区二区| 另类欧美日韩国产在线| 国产美女久久久久| voyeur盗摄精品| 一本到三区不卡视频| 欧美日韩亚洲综合一区| 欧美一区二区三区精品| 久久精品亚洲精品国产欧美kt∨| 亚洲国产电影在线观看| 亚洲人成7777| 午夜在线成人av| 狠狠v欧美v日韩v亚洲ⅴ| 国产电影一区在线| 91亚洲精品一区二区乱码| 欧美日韩中文字幕一区二区| 日韩欧美一二三四区| 久久精品一级爱片| 亚洲美女免费视频| 日韩va亚洲va欧美va久久| 国产成人免费在线视频| 色综合久久中文综合久久牛| 在线91免费看| 国产午夜精品久久久久久免费视 | 一区二区三区免费在线观看| 日本中文一区二区三区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久亚洲二区三区| 一区精品在线播放| 午夜欧美电影在线观看| 国产一区久久久| 色综合 综合色| 3atv在线一区二区三区| 中文无字幕一区二区三区| 亚洲一区av在线| 国产成人亚洲精品青草天美| 欧洲精品中文字幕| xnxx国产精品| 一区二区三区丝袜| 国产一区二区三区在线观看精品| 91女人视频在线观看| 欧美电影免费提供在线观看| 国产精品乱人伦| 日韩中文字幕1| 成人精品一区二区三区四区| 欧美一区二区精品| 中文字幕一区二区三区乱码在线| 青草国产精品久久久久久| av中文字幕不卡| 日韩一区二区在线观看视频播放 | 久久综合色鬼综合色| 亚洲综合久久久| 国产**成人网毛片九色 | 久久人人97超碰com| 亚洲国产wwwccc36天堂|