The UNIX and Linux Forums  


Go Back   O UNIX e Linux Forum > Top Fóruns > Alto Nível de programação
.
google unix.com



Alto Nível de programação Post perguntas sobre C, C + +, Java, SQL, e outras linguagens de programação aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Qual o nível básico Filesets necessário por um programa específico? cypher82 UNIX & avançada para usuários experientes 4 05-29-2008 09:07
Ajuda necessária quanto programa C dwgi32 Alto Nível de programação 2 11-19-2007 10:44
Estranho coisa FSS e VGS mhenryj AIX 4 11-13-2007 04:42
Estranho resultados com awk amatheny Programação Shell Script e 2 11-01-2007 06:12
Mensagem Esquisito?? lesstjm UNIX para Dummies Perguntas & Respostas 6 01-04-2002 10:01

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 11-14-2007
karthikb23 karthikb23 is offline
Usuário
  
 

Join Date: Nov 2007
Lugares: 18
Obrigado

Obrigado rapazes para t entrada.

N1 Bem, eu estava pensando nas mesmas linhas. Levando-lo um pouco mais longe, uma vez que j foram atribuídos 15 bytes, mesmo se eu introduzir um tampão de dizer 20 (basicamente> 15), o programa não travar.

Agora, assumindo THT k alguns pontos a localização da sede / cerca de espaço alocado para j, por que esta condição não causar uma sobrecarga e, em seguida, provocar uma SEGV?

Shouldnt SEGV ocorrer quando o meu programa acessa qualquer memória fora do seu espaço alocado? (para não falar válido / inválido addessses)

Além disso, eu reparei THT prévia para uma sprintf em 'k', uma vez que o seu valor era de stdout, e depois da string em sprintf. Talvez estes sejam tratados como endereços válidos e dentro de limites programa?

BTW, eu vim com o cenário acima accidently quando experimentam algo. Além disso, eu sei ao certo o que estou fazendo é ilegal, mas perplexes mim quando ele funciona!
  #2 (permalink)  
Old 11-14-2007
porteiro porter is offline Forum Advisor  
Usuário
  
 

Join Date: Jan 2007
Posts: 2.965
Citação:
Originally Posted by karthikb23 View Post
Shouldnt SEGV ocorrer quando o meu programa acessa qualquer memória fora do seu espaço alocado? (para não falar válido / inválido addessses)
É uma aplicação estrita detalhe como este é, algumas arquiteturas pode simplesmente reunir a memória virtual e adicioná-lo ao seu trabalho conjunto, especialmente se o sistema operacional que você acha que são apenas prorroga a pilha.

Também diferentes arquiteturas são mais rigorosas do que outros em relação (a) ao longo do código escrito áreas (b) acesso desalinhadas.
  #3 (permalink)  
Old 11-14-2007
DreamWarrior DreamWarrior is offline
Usuário
  
 

Join Date: Oct 2003
Lugares: 70
Você tentou imprimir o conteúdo de 'j', quando ela existe? Desde a introdução do 'j' é o que está causando o SEGV parar, então eu iria adivinhar o seu conteúdo é influenciar o resultado.

Todo mundo é tão focada em 'k', ainda estou a ver ninguém menciona 'i'. O sprintf deve atravessar qualquer conteúdo 'i' e está a apontar para que emitem para 'k'. Desconfio que 'j' e 'i' tem mais uma relação de 'j' e 'k'.

Se eu tivesse de tomar um palpite, "j" (quando existir) tem, em algum momento, um nulo terminador ( '\ 0') dentro dele, e 'i' é (em algum momento antes do SEGV) que funciona no conteúdo de 'j'. Isto, naturalmente, limita a quantidade de "lixo", você pode tanto ler e pau na unreferenced 'k' e, portanto, reduz o potencial de SEGV.

Leve 'j' para fora da imagem e do sprintf obviamente é executado em uma área de memória não deve. Meu palpite, enquanto o sprintf está percorrendo 'i' transbordamento que diabos você quer fora de 'k', porque não há terminador nulo na memória por muito tempo ou se não houver nenhuma terminador nulo perante o sprintf fica no texto segmento e no SO não gosta que violem os dados segmento.

Gostaria de testar a minha teoria, mas AIX tarolos independentemente da presença de 'j'.
  #4 (permalink)  
Old 11-14-2007
karthikb23 karthikb23 is offline
Usuário
  
 

Join Date: Nov 2007
Lugares: 18
poderia ser, mas, quando impresso no conteúdo do j, que era "" (como é óbvio, pois é um manequim).
Mas talvez possa haver algum lixo nos 15 bytes alocados.
U Como mencionado, deve-dump core ambas as vezes.

Além disso, é mencionado como porteiro até o SO quando / quanto ele deve ser rigoroso.
  #5 (permalink)  
Old 11-15-2007
n1djs n1djs is offline
Usuário
  
 

Join Date: Nov 2007
Lugares: 12
Um SEGV, por definição, quer dizer, você está tentando gravar em um segmento fora da memória alocada para você. No primeiro caso, você não tinha armazenamento atribuída, apenas apontadores, para escrever o primeiro deu-lhe a SEGV. A segunda é mais difícil de detectar um erro. Enquanto você estiver escrevendo para qualquer memória alocada para você, você não irá receber um SEGV. Seus ponteiros só acontecem ao ponto de afectar memória, neste caso, o seu j [] tabela de caracteres. Escreve bastante coisa lá, e você receberá uma SEGV ali também, quando você cair no final da sua memória alocada. O compilador e executar o tempo libs não tem idéia se pretender apontar para memória alocada, ou se, em que memória alocada pretende ponto, com seus ponteiros. Enquanto você está apontando para memória alocada, a execução, não será um problema SEGV (Você não está escrito fora da memória alocada)
  #6 (permalink)  
Old 11-15-2007
porteiro porter is offline Forum Advisor  
Usuário
  
 

Join Date: Jan 2007
Posts: 2.965
Empilhamentos Tipicamente são prorrogadas por segmento violações, em vez de atribuir uma enorme pilha para um processo, põe guarda páginas abaixo dela, e quando tropeçar aqueles que cresce a pilha.
  #7 (permalink)  
Old 11-16-2007
DreamWarrior DreamWarrior is offline
Usuário
  
 

Join Date: Oct 2003
Lugares: 70
Citação:
Originally Posted by karthikb23 View Post
poderia ser, mas, quando impresso no conteúdo do j, que era "" (como é óbvio, pois é um manequim).
Mas talvez possa haver algum lixo nos 15 bytes alocados.
U Como mencionado, deve-dump core ambas as vezes.

Além disso, é mencionado como porteiro até o SO quando / quanto ele deve ser rigoroso.
Você diria que "é óbvio", mas, em seguida, "obviamente" todos os outros ponteiros deve ser definido para NULL também. Escreva para NULL deve causar SEGV .... No entanto, se ele é ", em seguida, que é parte da razão por que a existência de 'j' você está parando de SEGV. Porque enquanto sprintf está percorrendo a string 'i' para despejar o seu conteúdo em 'k', que imediatamente bate o NULL terminador e limita o dano feito. Muito possivelmente, o "dano" feito reside inteiramente no atribuídos pilha e nunca SEGVs. De qualquer maneira, você está clobbering coisas que você não deve.

Além disso, eu não estou certo de que um SEGV (por definição) é sempre devido a escreve. Existe um texto e dados segmento e eu suspeito que uma tentativa de ler o texto segmento poderia também causar um SEGV em alguns sistemas operacionais.
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 08:40.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0