AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-18202

thb's questions

Martin Hope
thb
Asked: 2019-12-01 04:59:44 +0800 CST

Como usar stat ou bash para verificar se FILENAME se refere a um arquivo

  • 3

O statcomando oferece, ou bashoferece, uma maneira direta de verificar se se FILENAMErefere a um arquivo em vez de, digamos, a um diretório?

Usando bashand stat, aqui está minha solução feia:

if RESPONSE="$(LC_ALL=C stat -c%F FILENAME)"\
 && [ "$RESPONSE" = 'regular file'\
 -o "$RESPONSE" = 'regular empty file' ]
then
    # do something ...
fi

Veja também esta questão relacionada.

files stat
  • 2 respostas
  • 1337 Views
Martin Hope
thb
Asked: 2019-11-19 14:30:27 +0800 CST

Como parar transmissões automáticas não autorizadas?

  • 2

Meu sistema GNU/Linux transmite dados pela Internet, quer eu peça ou não. Como posso fazê-lo parar?

Por exemplo, sem perguntar, o software Firefox do meu sistema evidentemente entra em contato com o Mozilla.org em segundo plano. Da mesma forma, sem perguntar, o software GNOME do meu sistema solicita notificações de alguém pela rede. (Estes são apenas exemplos. Não estou perguntando como configurar o Firefox ou o GNOME especificamente. Em vez disso, estou perguntando como parar transmissões automáticas não autorizadas em geral.)

quero meu sistema

  • para se conectar à Internet, mas
  • permanecer em silêncio até que eu peça ao sistema para transmitir dados e
  • transmitir dados, quando eu pedir, apenas ao meu destinatário pretendido.

Como posso fazer meu sistema parar de balbuciar?

(Para informações, minha distribuição é Debian. No entanto, usuários Debian, Fedora e Arch são igualmente bem-vindos para responder.)

networking
  • 2 respostas
  • 67 Views
Martin Hope
thb
Asked: 2019-03-29 06:31:57 +0800 CST

Se o heap é inicializado com zero para segurança, então por que a pilha é meramente não inicializada?

  • 17

No meu sistema Debian GNU/Linux 9, quando um binário é executado,

  • a pilha não é inicializada, mas
  • o heap é inicializado com zero.

Por quê?

Presumo que a inicialização zero promova a segurança, mas, se para o heap, por que não também para a pilha? A pilha também não precisa de segurança?

Minha pergunta não é específica para o Debian até onde eu sei.

Exemplo de código C:

#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>

const size_t n = 8;

// --------------------------------------------------------------------
// UNINTERESTING CODE
// --------------------------------------------------------------------
static void print_array(
  const int *const p, const size_t size, const char *const name
)
{
    printf("%s at %p: ", name, p);
    for (size_t i = 0; i < size; ++i) printf("%d ", p[i]);
    printf("\n");
}

// --------------------------------------------------------------------
// INTERESTING CODE
// --------------------------------------------------------------------
int main()
{
    int a[n];
    int *const b = malloc(n*sizeof(int));
    print_array(a, n, "a");
    print_array(b, n, "b");
    free(b);
    return 0;
}

Resultado:

a at 0x7ffe118997e0: 194 0 294230047 32766 294230046 32766 -550453275 32713 
b at 0x561d4bbfe010: 0 0 0 0 0 0 0 0 

O padrão C não pede malloc()para limpar a memória antes de alocá-la, é claro, mas meu programa C é meramente ilustrativo. A pergunta não é sobre C ou sobre a biblioteca padrão de C. Em vez disso, a pergunta é sobre por que o kernel e/ou o carregador de tempo de execução estão zerando o heap, mas não a pilha.

OUTRO EXPERIMENTO

Minha pergunta diz respeito ao comportamento GNU/Linux observável em vez dos requisitos dos documentos de padrões. Se não tiver certeza do que quero dizer, tente este código, que invoca mais comportamento indefinido ( indefinido, ou seja, no que diz respeito ao padrão C) para ilustrar o ponto:

#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>

const size_t n = 4;

int main()
{
    for (size_t i = n; i; --i) {
        int *const p = malloc(sizeof(int));
        printf("%p %d ", p, *p);
        ++*p;
        printf("%d\n", *p);
        free(p);
    }
    return 0;
}

Saída da minha máquina:

0x555e86696010 0 1
0x555e86696010 0 1
0x555e86696010 0 1
0x555e86696010 0 1

No que diz respeito ao padrão C, o comportamento é indefinido, então minha pergunta não diz respeito ao padrão C. Uma chamada para malloc()não precisa retornar o mesmo endereço todas as vezes, mas, como essa chamada para de malloc()fato retorna o mesmo endereço todas as vezes, é interessante notar que a memória, que está no heap, é zerada a cada vez.

A pilha, por outro lado, não parecia estar zerada.

Não sei o que o último código fará em sua máquina, pois não sei qual camada do sistema GNU/Linux está causando o comportamento observado. Você pode, mas tente.

ATUALIZAR

@Kusalananda observou nos comentários:

Para o que vale a pena, seu código mais recente retorna diferentes endereços e (ocasionalmente) dados não inicializados (diferentes de zero) quando executados no OpenBSD. Isso obviamente não diz nada sobre o comportamento que você está testemunhando no Linux.

Que meu resultado difere do resultado no OpenBSD é realmente interessante. Aparentemente, meus experimentos estavam descobrindo não um protocolo de segurança do kernel (ou linker), como eu pensava, mas um mero artefato de implementação.

Diante disso, acredito que, juntas, as respostas abaixo de @mosvy, @StephenKitt e @AndreasGrapentin resolvem minha dúvida.

Veja também no Stack Overflow: Por que o malloc inicializa os valores como 0 no gcc? (crédito: @bta).

linux security
  • 4 respostas
  • 6811 Views
Martin Hope
thb
Asked: 2018-12-03 12:55:18 +0800 CST

O mecanismo padrão para alternar GPUs não está documentado, não é?

  • 3

Meu laptop é uma máquina normal e desinteressante com duas GPUs padrão não multiplexadas e uma instalação comum do Debian. A GPU secundária (uma Radeon) geralmente é desligada, mas posso ativá-la e usá-la (por exemplo) DRI_PRIME=1 glxgears. O arquivo fonte do Mesa src/loader/loader.c o gerencia.

Está DRI_PRIMEindocumentado?

Desejo ler a documentação, mas não consigo encontrá-la. Curiosamente, não está aqui. Além disso, o Google não pode localizá-lo. Se você souber onde está a documentação, você diria?

Alternar GPUs é uma função de sistema bastante importante. Alguém poderia pensar que o mecanismo que faz isso seria completamente documentado, mas tudo o que posso encontrar são algumas entradas oblíquas do changelog e algumas tradições online como esta.

INFORMAÇÃO ADICIONAL

Você não precisará do Debian para responder à minha pergunta. Qualquer Linux deve fazer.

Caso um leitor que deseja começar a aprender sobre comutação de GPU tropeçar aqui, ele pode tentar sudo cat /sys/kernel/debug/vgaswitcheroo/switchler html/newstyle/gpu/vga-switcheroo.html na fonte do kernel Linux. Também, man 8 lspci. Levei duas horas para descobrir isso, então menciono aqui para economizar tempo do leitor.

Enquanto isso, onde está a documentação adequada das variáveis ​​de ambiente do Mesa como DRI_PRIME, por favor?

linux gpu
  • 1 respostas
  • 77 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve