半年翻倍!OpenAI再融300亿,估值冲到1.4万亿
掘金
OpenAI正洽谈至少300亿美元新一轮融资,投前估值约1.4万亿美元,较今年3月的8520亿美元上涨逾60%。这笔融资是IPO前的过桥轮,而非直接上市。与此同时,公司年化收入已达400亿美元,7月以
Балл: 57.07Уверенность: 54%
ПодробнееЗагружаем каталог…
НАВИГАТОР ПО ВОЗМОЖНОСТЯМ ИИ
Найдите свой ИИ-инструмент. Бесплатный доступ, пробные периоды и кредиты — в одном месте.
掘金
OpenAI正洽谈至少300亿美元新一轮融资,投前估值约1.4万亿美元,较今年3月的8520亿美元上涨逾60%。这笔融资是IPO前的过桥轮,而非直接上市。与此同时,公司年化收入已达400亿美元,7月以
Балл: 57.07Уверенность: 54%
Подробнее掘金
周五下午,距离上线还有2小时,我盯着监控面板上某个API的异常错误率从0.1%飙升到15%。翻遍日志发现一堆——明明数据校验逻辑里写了严格的非空判断,为什么还会漏? 现象:隐式转换的“完美绕过”
Балл: 57.06Уверенность: 54%
Подробнее掘金
一次 HTTPS 请求从应用层到物理层的完整旅程,逐层追踪数据封装/解封装过程。 synthesis 页:跨 HTTP协议/TLS协议/TCP协议/DNS协议/ARP协议/ICMP协议 综合分析。 1
Балл: 57.06Уверенность: 54%
ПодробнееiThome 新聞
隨著業界開始為後量子密碼學(PQC)遷移做準備,如何降低相關憑證導入帶來的效能與遷移負擔,也成為憑證基礎架構面臨的課題。
Балл: 57.05Уверенность: 54%
ПодробнееiThome 新聞
9月30日思科針對Catalyst SD-WAN Manager用戶提出警告,他們發現及修補已遭利用的重大漏洞CVE-2026-76504,用戶需儘速採取行動。
Балл: 57.05Уверенность: 54%
Подробнее人人都是产品经理
AI 圈最近的更新速度,已经快到让人有点跟不上。 以前 OpenAI、Anthropic、Google 这种顶级玩家发布一次旗舰模型,市场通常会消化几个月。 现在的节奏完全变了。 你刚开始研究一个新模型,下一场发布会已经在路上。 就在 OpenAI 和 Anthropic 不断推进下一代模型的时候,谷歌 DeepMind 终于拿出了自己的年度旗舰: Gemini 4 Argon。 这次发布,谷歌给出的信号非常明确: 代码能力、企业任务、安全能力、长上下文能力,全部朝着“生产力工具”方向推进。 但有意思的是,发布会之外,围绕 Gemini 4 Argon 的讨论也出现了分歧。 一部分声音认为,这可能是谷歌重新回到 AI 第一梯队的重要产品。 另一部分声音则认为, 模型测试成绩很漂亮,但真正放进复杂业务环境,还有距离。 这其实也是整个 AI 行业正在面对的问题: 模型跑分越来越强,但它距离成为一个真正可靠的 AI 同事,还有多远? 01、Gemini 4 Argon 最大升级:一次处理百万 Token 01一、Gemini 4 Argon 最大升级:一次处理百万 Token 先看最核心的变化。 Gemini 4 Argon 最大的升级之一,就是上下文窗口。 相比上一代约 6.4 万 Token 的限制,新模型直接提升到了 100 万 Token 。 简单理解: 以前 AI 处理几十页资料已经不错。 现在,它可以一次性理解: 几百页代码、大型项目文档、长篇合同资料,甚至企业内部知识库。 对于开发者来说,这意味着 AI 开始从“代码助手”向“项目级助手”变化。 它不只是帮你修改一个函数,而是可以尝试理解整个项目的结构、依赖关系和业务逻辑。 价格方面,谷歌这次也明显提高了竞争力。 Gemini 4 Argon 输入价格为: 每百万 Token 2 美元。 输出价格: 每百万 Token 10 美元。 如果命中缓存,输入成本最高还能降低 95%。 对于企业用户来说,这意味着以前成本较高的大规模 AI 任务,现在开始具备长期使用可能。 02 、谷歌开始让 AI 进入真正的大工程 过去很多 AI 发布会,最容易展示的是 benchmark 成绩。 但真正能体现模型价值的,是它有没有参与真实项目。 这一次,谷歌拿出了几个内部案例。 其中一个案例,是数据中心优化。 谷歌表示,Argon 智能体团队分析大量服务器运行数据,自动寻找内存优化空间。 最终释放超过 300 TiB 内存 。 这个数字非常夸张。 简单换算,相当于几十万台普通电脑的存储规模。 另一个案例,是大型代码迁移。 很多企业一直希望把老旧 C/C++ 代码迁移到 Rust,因为 Rust 在安全性方面更有优势。 但问题在于: 大型系统代码量巨大,人工迁移成本极高。 谷歌表示,Argon 已经参与 Fuchsia 系统 Zircon 内核等大型代码迁移工作。 在 libgav1 视频解码库案例中,Argon 分析并优化超过 3.2 万行 SIMD 代码 ,进一步提升 Rust 版本性能。 这些案例释放出的信号很明显: 谷歌希望证明 Gemini 不只是聊天机器人,而是在进入企业真实工作流。 03 、Benchmark 第一,真实工作能力也要经过验证 从公开测试结果来看,Gemini 4 Argon 的成绩确实非常亮眼。 例如: DeepSWE v1.1 软件工程测试中,Argon 获得 77.9% 的成绩。 此外,在金融、法律、自动化、安全等测试中,也取得领先表现。 但问题也随之出现。 AI 行业内近几年出现了一个词: Benchmaxxing。 简单理解,就是模型为了提升测试成绩,不断针对 benchmark 进行优化。 但真实工作环境,往往比测试题复杂得多。 一道编程题,AI 可以快速完成。 但真实企业项目通常包含: 几十万行代码,复杂业务逻辑,历史遗留问题,团队协作要求。 这些因素,很难完全通过单一测试体现。 所以现在越来越多企业开始关注: AI 到底能不能稳定完成任务。 04 、谷歌最大的挑战,可能来自 AI 入口变化 Gemini 4 Argon 背后,其实还有更大的竞争。 过去几十年,Google 最强大的能力一直是搜索入口。 用户遇到问题,会打开搜索框寻找答案。 但随着 AI Agent 的发展,这种习惯正在发生变化。 未来用户可能直接告诉 AI: 帮我整理资料,帮我安排会议,帮我分析合同,帮我完成方案。 搜索正在从 “寻找答案”,变成“执行任务”。 这也是为什么 OpenAI、Anthropic、Meta 等公司都在布局个人智能体。 大家现在争夺是 谁能够成为用户每天工作和生活中的 AI 助手。 05 写在最后 Gemini 4 Argon 的发布,证明 Google 依然拥有顶级 AI 研发能力。 百万 Token 上下文、企业级任务处理、代码工程能力,这些都是非常强的信号。 但 AI 竞争已经进入新的阶段。 模型参数和 benchmark 成绩,只能证明模型拥有潜力。 真正决定未来的,是它能不能进入用户每天的工作流程。 过去互联网竞争抢的是网站入口。 移动互联网竞争抢的是 App 入口。 而 AI 时代争夺的,很可能是那个每天帮用户完成事情的智能助手。 Gemini 4 Argon 能不能帮助 Google 抢回主动权,还需要时间验证。 但可以确定: 这场 AI 大战,远没有结束。 本文由作者@运营派AI Lab,授权发布于平台,未经许可禁止转载。
Балл: 56.97Уверенность: 54%
ПодробнееInfoQ - 促进软件开发领域知识与创新的传播
点击查看原文>
Балл: 56.32Уверенность: 54%
Подробнееvelog
Buy Old Facebook Accounts – Complete Guide to Account Age, History, Privacy and Security ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤Email➜ getpvatop@gmail.com ═══════✮➤Discord➜❯ getpvatop ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤═══════✮➤═══════✮ For more information, visit @getpvatop.com Meta Description: Learn about old Facebook accounts, account age, profile history, digital reputation, privacy, security, ownership concerns, and responsible account management. URL Slug: buy-old-facebook-accounts Introduction Facebook remains one of the world's largest social platforms, with users creating profiles that can remain active for many years. As a result, people sometimes search for Buy Old Facebook Accounts when researching established profiles, account longevity, social history, and digital identity. An older Facebook account may have a longer history of legitimate activity, connections, posts, and interactions. However, account age alone does not guarantee authenticity, trust, security, reach, or usefulness. Established profiles can also contain highly personal information, including photographs, conversations, contacts, historical posts, and account-recovery information. This makes privacy, security, and legitimate ownership important considerations. This guide explains old Facebook accounts from an informational perspective, focusing on account maturity, digital history, privacy, security, reputation, common misconceptions, and responsible account management. Important Note: Buying, selling, sharing, or transferring Facebook accounts may create privacy, security, ownership, and platform-policy concerns. Review Meta's current policies before making decisions involving an account. What Is an Old Facebook Account? An old Facebook account is generally a profile that was created a long time ago. Depending on its history, an established profile may contain: Older posts Photographs Friends and connections Groups Pages or other platform activity Historical interactions Profile information Long-term security history However, not every old account has substantial activity. One profile may have years of genuine engagement, while another may have remained mostly inactive. Therefore, Buy Old Facebook Accounts should not be interpreted as meaning that account age automatically represents account quality. Why Do People Search for Buy Old Facebook Accounts? ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤Email➜ getpvatop@gmail.com ═══════✮➤Discord➜❯ getpvatop ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤═══════✮➤═══════✮ For more information, visit @getpvatop.com Search interest around old Facebook accounts can involve several topics. People may research: Account age Profile history Social connections Digital identity Privacy Security Historical activity Reputation Some people assume that older profiles automatically receive greater trust or visibility. That assumption should be treated carefully because platform systems and user trust involve many factors beyond registration date. Account Age vs. Account Quality Account age is only one attribute of a Facebook profile. A profile's broader characteristics may include: Factor Description Account age Length of time the profile has existed Activity history Previous legitimate use Connections Friends, groups, and communities Content history Posts, photos, and other activity Security Protection against unauthorized access Privacy Control over personal information Authenticity Whether the profile represents a legitimate identity Policy compliance Whether the profile follows platform rules An older account with weak security may be less secure than a newer account with strong security. Understanding Facebook Profile History An established Facebook profile can contain years of digital history. This may include: Posts Comments Reactions Photos Videos Friend connections Group participation Public profile information Historical activity can provide context, but it can also create privacy concerns. Older content may continue to reveal information about a person's interests, relationships, locations, or past activities. Facebook Digital Footprint A long-standing Facebook account can have a substantial digital footprint. The footprint may include: Profile information Public posts Photos Comments Friend connections Group activity Page interactions Historical usernames or profile information The larger the digital footprint, the more important privacy management becomes. Why Digital Footprint Matters ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤Email➜ getpvatop@gmail.com ═══════✮➤Discord➜❯ getpvatop ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤═══════✮➤═══════✮ For more information, visit @getpvatop.com Online information can remain visible for long periods. Before managing an established profile, users should consider: What information is publicly visible? Which posts are still accessible? Are old photographs private? Which groups or communities are associated with the profile? Are there unnecessary personal details? Does the profile accurately represent its current user? Privacy Considerations Privacy is a major consideration when discussing Buy Old Facebook Accounts. A Facebook profile may contain information that is highly personal. Examples include: Photos Family information Friend lists Private messages Locations Personal interests Professional information This is why credentials and account information should always be protected. Users should avoid accessing another person's private information or treating someone else's digital identity as ordinary transferable property. Facebook Account Security Account age does not automatically provide better security. Security depends on current protections and account-management practices. Password Protection Use a strong and unique password and avoid reusing the same credentials elsewhere. Authentication Protection Use available authentication and login-security features provided by Facebook. Login Activity Monitor recognized devices and unexpected login activity where these controls are available. Recovery Information Protect account-recovery methods and keep them appropriately maintained. Suspicious Activity Unexpected login alerts, unfamiliar changes, or unusual account behavior should be investigated through official Facebook security tools. Social Connections and Established Profiles An older Facebook profile may contain years of social connections. These relationships may represent: Friends Family Colleagues Community members Group participants Social connections are personal and should not be treated as automatically transferable. Misrepresenting an identity or misleading existing contacts can create privacy and trust concerns. Posts, Photos, and Historical Content An established profile may contain a significant amount of historical content. Older content can sometimes reveal: Past interests Personal relationships Locations Events Opinions Professional history Users managing their own profiles should periodically review privacy settings and consider whether older content remains appropriate to share publicly. Username and Digital Identity ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤Email➜ getpvatop@gmail.com ═══════✮➤Discord➜❯ getpvatop ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤═══════✮➤═══════✮ For more information, visit @getpvatop.com A Facebook profile can become closely associated with a person's digital identity. A long-standing profile may be recognized by existing contacts because of its name, photographs, posts, and social connections. Responsible digital identity management means: Avoiding impersonation Providing accurate information Respecting other users Protecting private information Following platform requirements An established profile should never be used to mislead people about who is operating it. Common Misconceptions About Old Facebook Accounts Myth 1: Older Accounts Are Automatically Better Not necessarily. Account age is only one factor. Myth 2: Old Accounts Automatically Have More Reach Account age alone does not guarantee greater visibility or engagement. Myth 3: An Old Profile Is Automatically Trusted Trust depends on authenticity, activity, context, and relationships rather than age alone. Myth 4: Old Accounts Are Automatically Secure Security depends on current protections and account activity. Myth 5: Account Age Overrides Facebook Policies An established account remains subject to applicable platform rules and requirements. Risks Associated With Account Transfers People searching for Buy Old Facebook Accounts may encounter third-party offers involving account credentials or account transfers. Potential risks include: Loss of access Unknown historical activity Privacy exposure Security vulnerabilities Recovery conflicts Previous policy violations Ownership disputes Problems involving existing contacts or groups These risks are important to understand before sharing sensitive information with third parties. Responsible Facebook Account Management Responsible account management should focus on legitimate use, privacy, and security. Useful practices include: Keep passwords confidential. Use available authentication protections. Review login activity. Protect recovery information. Review public profile visibility. Check old posts and photos. Avoid impersonation. Follow Facebook's applicable policies. Researching Getpvatop.com People researching Buy Old Facebook Accounts may encounter Getpvatop.com while exploring online account-related information. Before relying on any website or service, independently review: Privacy practices Terms and conditions Security information Contact details Website transparency Independent reputation Handling of account credentials Never share passwords, authentication codes, or recovery information simply because a third party requests them. ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤E
velog
안녕하세요, 이전에 잠깐 언급드렸던 아이디어 중 Shallow Copy UAF에 대해서 좀 더 자세히 다뤄보려 합니다. 아직 취약으로 정식 보고가 올라온 사례는 아닙니다. 단순 개인 아이디어로만 생각하고 편히 읽으심 될 것 같습니다. 리눅스 커널의 BPF 서브시스템은 사용자 공간에서 제출한 BPF 프로그램을 그냥 받아서 바로 실행하지 않습니다. BPF 서브시스템은, constant blinding 이라는 보안 기법을 통해 여러 단계의 검증을 거치게 됩니다. * Constant blinding이 필요한 이유는 JIT 스프레이 공격 때문입니다. * 공격자가 BPF 명령어 안에 특정 상수값을 심어두면 JIT 컴파일러가 그 상수를 기계어로 변환하는 과정에서 공격자가 원하는 바이트 패턴이 커널 메모리 안에 자연스럽게 배치됩니다. 이 패턴이 나중에 실행 흐름을 가로채는 데 쓰일 수 있습니다. 이를 막기 위해 커널은 BPF 프로그램 안의 상수값을 XOR로 랜덤화합니다. 예를 들어 상수 0x1234가 있으면, 랜덤 키 0xABCD로 XOR해서 0xB8F9로 바꾼 뒤 저장하고, 실제 사용할 때는 다시 XOR로 원래 값을 복원하는 방식입니다. 이렇게 하면 공격자가 예측 가능한 바이트 패턴을 심을 수 없게 됩니다. 그런데 이 상수 변환 작업을 원본 BPF 프로그램 위에 직접 수행하면 문제가 생깁니다. 나중에 원본이 필요한 경우를 대비해야 하기도 하고 중간에 실패했을 때 롤백이 어렵습니다. 그래서 커널은 원본을 건드리지 않고 복사본을 만들어서 거기에 변환 작업을 합니다. 그 복사본을 만드는 함수가 바로 bpf_prog_clone_create() 입니다. bpf_prog_clone_create() 들여다보기 static struct bpf_prog *bpf_prog_clone_create(struct bpf_prog *fp_other, gfp_t gfp_extra_flags) { gfp_t gfp_flags = GFP_KERNEL | __GFP_ZERO | gfp_extra_flags; struct bpf_prog *fp; fp = __vmalloc(fp_other->pages * PAGE_SIZE, gfp_flags); if (fp != NULL) { memcpy(fp, fp_other, fp_other->pages * PAGE_SIZE); } return fp; } 함수 자체는 짧습니다. 원본 프로그램이 차지하는 크기만큼 메모리를 새로 잡고 memcpy로 통째로 복사한 뒤 반환합니다. 코드 줄 수만 보면 문제가 없어 보입니다. bpf_prog 구조체 내부 struct bpf_prog { u16 pages; u16 jited:1; u16 locked:1; struct bpf_prog_aux *aux; // 문제의 필드 struct sock *sk; union { struct bpf_insn insnsi[0]; struct bpf_prog *fp; }; }; struct bpf_prog_aux { atomic64_t refcnt; u32 used_map_cnt; u32 func_cnt; const struct bpf_prog_ops *ops; struct bpf_prog *prog; struct bpf_map **used_maps; void *jit_data; struct bpf_ksym ksym; }; * bpf_prog_aux는 BPF 프로그램의 실질적인 두뇌입니다. * JIT 컴파일 관련 데이터, 이 프로그램이 참조하는 맵 목록, 함수 포인터 테이블, 심볼 정보까지 여기에 있습니다. bpf_prog 구조체 자체가 BPF 프로그램의 뼈대라면, bpf_prog_aux는 그 뼈대에 붙어있는 근육 같은 존재입니다. memcpy(fp, fp_other, size) 고찰 memcpy(fp, fp_other, size)가 실행되면 fp_other가 차지하는 메모리 블록의 바이트들을 처음부터 끝까지 순서대로 fp에 복사합니다. pages 필드, jited 플래그, 문제의 aux 필드까지 전부 그대로 복사됩니다. 여기서 핵심은, aux 필드에 실제로 저장되어 있는 값은 무엇인가 하는 겁니다. 그 값은 숫자입니다. 예를 들면 0xFFFF888012345678 같은 64비트 주소값입니다. 이 숫자가 의미하는 건 "이 주소의 메모리에 bpf_prog_aux 데이터가 들어있다"는 것입니다. aux 필드 자체가 데이터를 품고 있는 게 아니라, 데이터가 어디에 있는지 가르쳐주는 지도 역할을 하는 숫자일 뿐입니다. memcpy는 이 숫자를 그대로 복사합니다. 당연히 fp->aux에도 0xFFFF888012345678이라는 똑같은 숫자가 들어갑니다. 그런데 이 복사가 bpf_prog_aux 데이터 블록 자체를 새로 만들어주지는 않습니다. 새 메모리를 잡아서 내용을 옮기는 것이 아니라 그냥 "저 주소에 가면 데이터가 있어"라는 쪽지를 한 장 더 베껴 쓴 것뿐입니다. 결국 fp_other->aux와 fp->aux는 둘 다 0xFFFF888012345678이라는 동일한 주소를 가리키고 있습니다. 하나의 bpf_prog_aux 데이터 블록을 두 개의 bpf_prog가 동시에 소유하고 있는 상황입니다. 커널은 이 사실을 전혀 모릅니다. 참조 카운터는 여전히 1입니다. 원본의 카운터 값 1이 그대로 복사됐기 때문입니다. 실제 참조자는 두 명인데 카운터는 한 명이라고 알고 있습니다. UAF Timeline [P1] 클론 생성 직후 fp_other->aux와 fp->aux가 동일한 메모리 주소를 가리키고 있습니다. 커널은 이 상황을 인지하지 못하고 있으며, 두 bpf_prog 각자가 독립적인 aux를 가진 것으로 착각하고 있습니다. [P2] Constant blinding 완료 void bpf_prog_free(struct bpf_prog *fp) { struct bpf_prog_aux *aux = fp->aux; bpf_prog_free_deferred(aux); // aux 해제 vfree(fp); // fp 본체 해제 } Constant blinding 작업이 클론위에서 완료됩니다. 원본은 할 일을 다 했으므로 커널은 bpf_prog_free를 호출합니다. 이 함수는 먼저 fp_other->aux, 즉 0xFFFF888012345678 주소의 bpf_prog_aux 블록을 커널 메모리 할당자에게 반환합니다. "이 메모리 더 이상 쓰지 않으니 회수해가세요" 라는 신호입니다. 그 다음 fp_other 본체도 해제합니다. 이 순간부터 fp->aux가 가리키는 주소 0xFFFF888012345678은 이미 반납된 메모리가 됩니다. 하지만 fp->aux 필드 안에 저장된 숫자는 여전히 0xFFFF888012345678입니다.이제 이 포인터는 존재하지 않는 것을 가리키는 Dangling Pointer가 되었습니다. [P3] 커널이 해제된 메모리를 사용 * 리눅스 커널의 SLUB 할당자는 해제된 메모리를 즉시 재활용합니다. * 다른 커널 스레드가 소켓을 열거나, 파일을 열거나, 다른 BPF 프로그램을 로드하는 등 어떤 방식으로든 메모리 할당을 요청하면 방금 반납된 0xFFFF888012345678 자리를 그 새로운 객체에게 내어줄 수 있습니다. 이 타이밍은 예측이 불가능합니다. 이 시점 이후로는 그 주소에 완전히 다른 종류의 데이터가 들어있습니다. [P4] 클론 fp에 대한 접근 u32 func_cnt = fp->aux->func_cnt; fp->aux->ops->test_run(fp, attr, uattr); * 클론 fp는 아직 살아있습니다. 커널이 여전히 유효하다고 믿으며 fp->aux에 접근합니다. * func_cnt를 읽거나 ops->test_run() 같은 함수 포인터를 호출하는 순간, 커널은 bpf_prog_aux 구조체를 보고 있다고 믿지만 실제로는 그 자리에 들어온 전혀 다른 객체의 데이터를 읽거나, 심각한 경우에는 그 안에 있는 값을 함수 포인터로 착각해서 엉뚱한 주소로 점프합니다. 이것이 Use-After-Free입니다. Exploit 관점 공격자가 이 취약점을 무기화하려면 P2 와 P4 사이에 0xFFFF888012345678 위치를 공격자가 원하는 데이터로 채워야 합니다. 이를 힙 스프레이라 합니다. for (int i = 0; i < 1000; i++) { spray_object[i] = create_controlled_object( .ops = &fake_ops ); } 힙 스프레이는 확률 게임입니다. 공격자는 bpf_prog_aux와 같은 크기의 객체를 수백에서 수천 개씩 대량으로 생성합니다. SLUB 할당자는 같은 크기의 객체를 같은 슬랩 풀에서 관리하기 때문에 해제된 aux 자리를 그 중 하나가 차지할 가능성이 매우 높아집니다. 스프레이되는 각 객체 안에는 공격자가 제어하는 가짜 함수 포인터 테이블 주소가 심겨 있습니다. 스프레이가 성공하면 fp->aux->ops는 공격자가 만든 가짜 테이블을 가리킵니다. P4에서 커널이 fp->aux->ops->test_run()을 호출하는 순간 공격자가 지정한 주소로 점프합니다. 이건 커널 모드에서의 실행이기 때문에 SMEP이나 SMAP 같은 사용자 공간 격리 보호도 의미가 없습니다. 이미 커널 공간 안에서 일어나는 일입니다. 완전한 권한 탈취로 이어집니다. 패치 static struct bpf_prog *bpf_prog_clone_create(struct bpf_prog *fp_other, gfp_t gfp_extra_flags) { gfp_t gfp_flags = GFP_KERNEL | __GFP_ZERO | gfp_extra_flags; struct bpf_prog *fp; fp = __vmalloc(fp_other->pages * PAGE_SIZE, gfp_flags); if (fp != NULL) { memcpy(fp, fp_other, fp_other->pages * PAGE_SIZE); fp->aux = kmalloc(sizeof(*fp->aux), GFP_KERNEL); if (!fp->aux) { vfree(fp); return NULL; } memcpy(fp->aux, fp_other->aux, sizeof(*fp->aux)); fp->aux->prog = fp; atomic64_set(&fp->aux->refcnt, 1); } return fp; } * 수정의 핵심은 두 bpf_prog가 서로 다른 bpf_prog_aux를 소유하도록 만드는 것입니다. * kmalloc으로 새 메모리를 잡아서 fp->aux가 완전히 새로운 주소를 가리키게 하고, 그 새 공간에 원본의 내용을 복사합니다. 이제 원본이 해제되어 fp_other->aux의 메모리가 반납되더라도 fp->aux는 전혀 다른 주소를 가리키고 있으므로 아무런 영향을 받지 않습니다. 역참조 포인터인 aux->prog도 갱신해야 합니다. 원본의 aux->prog는 fp_other를 가리키고 있었는데, 내용을 그대로 복사하면 클론의 aux->prog도 원본을 가리키는 잘못된 상태가 됩니다. fp->aux->prog = fp로 명시적으로 바로잡아야 합니다. 참조 카운터도 원본에서 복사된 값을 그대로 쓰면 안 되고, 새 aux는 참조자가 클론 하나뿐이므로 1로 초기화해야 합니다.
velog
카드 확장 애니메이션 시리즈 — 애니메이션이 끝나고 실제 콘텐츠가 보일 때, 스크롤 위치가 이상하게 어긋나는 버그를 쫓다가 알게 된 것. 증상 전환 애니메이션이 끝나고 진짜 콘텐츠가 화면에 드러나는 순간, 스크롤이 0이 아닌 채로(전환 중에 스크롤해뒀던 값 그대로) 시작되는 문제가 있었다. 의도는 "콘텐츠가 드러나기 직전에 스크롤을 맨 위로 되돌려두는 것"이었는데, 실제로는 그렇게 안 됐다. 세 번의 시행착오 1차 시도 — 콘텐츠를 드러내는 함수 안에서 window.scrollTo(0, 0) 을 직접 호출. 실패. 스크롤이 순간이동하는 게 아니라 눈에 띄게 스르륵 올라가는 현상이 그대로 남았다. 2차 시도 — setState 가 이벤트 핸들러 안에서 항상 동기적으로 반영되는 건 아니라는 점을 고려해서, 상태값이 바뀐 걸 감지하는 useLayoutEffect 로 호출 위치를 옮김. 여전히 실패. 특정 항목부터는 문제가 재현되고 어떤 항목은 괜찮은 패턴까지 확인됐다. 3차 시도(진짜 원인) — 여기서 behavior: 'auto' 를 "즉시 이동"이라고 잘못 알고 있었다는 걸 깨달았다. 진짜 원인 Element.scrollIntoView() 와 window.scrollTo() 의 behavior 옵션은 세 가지 값을 받는다: smooth : 부드럽게 애니메이션 instant : 정말로 즉시, 한 번에 이동 auto : CSS의 scroll-behavior 속성 계산값을 그대로 따름 MDN 공식 문서가 이걸 명확히 규정하고 있다: "auto: scroll behavior is determined by the computed value of scroll-behavior. The default is auto." 즉 'auto' 는 "즉시 이동"이 아니라 "CSS에 위임한다" 는 뜻이다. 이 프로젝트의 전역 스타일시트에 scroll-behavior: smooth 가 걸려 있었기 때문에, behavior: 'auto' 를 넣어도 실제로는 여전히 부드럽게(smooth) 애니메이션되며 스크롤이 이동했던 것이다. 진짜로 CSS를 무시하고 즉시 이동시키려면 'instant' 를 명시해야 한다. // 이렇게 하면 여전히 CSS의 smooth 설정을 따라간다 element.scrollIntoView({ behavior: 'auto', block: 'center' }); // 진짜 즉시 이동하려면 element.scrollIntoView({ behavior: 'instant', block: 'center' }); 왜 어떤 항목에서는 문제가 안 보였나 한 항목에서는 증상이 재현되지 않았는데, 알고 보니 우연이었다 — 그 항목은 스크롤해야 할 거리 자체가 0에 가까웠다. 이동할 거리가 거의 없으니 behavior 값이 smooth 든 instant 든 눈에 보이는 차이가 안 났을 뿐이었다. "특정 케이스에서 문제가 없다"는 게 "그 케이스에서 코드가 맞게 동작했다"를 보장해주지 않는다는 걸 보여준 사례다. 한 가지 더 — "체감이 안 된다"가 "코드가 틀렸다"의 반대말은 아니다 이 버그를 추적하는 과정에서, 이전 단계에서 이미 behavior: 'auto' 를 넣어본 적이 있었다. 그때는 "체감상 큰 차이는 없다"는 반응이 나와서 그대로 넘어갔는데, 사실 그 수정 자체가 'auto' 가 기존 기본값과 똑같아서 아무 효과가 없었던 것 이었다. 나중에 전체 코드를 다시 점검하면서 "혹시 불필요한 코드가 있으면 지우자"는 취지로 살펴봤는데, 결론은 지울 게 없었다 — 방향(어떤 값을 넣어야 하는지에 대한 개념)은 전부 맞았고, 'instant' 라는 정확한 값 하나가 빠져 있었을 뿐이었다. 즉 "체감상 차이가 없다"는 관찰은 "코드가 의도대로 동작하고 있다"는 증거가 아니라, 단순히 "이번 케이스에선 값의 차이가 드러날 조건이 아니었다"일 수도 있다는 걸 유의할 필요가 있다. 출처 MDN, Element: scrollIntoView() method — behavior 옵션 정의: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView MDN, scroll-behavior (CSS 속성): https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior
Балл: 54.4Уверенность: 49%
Подробнееvelog
문제 표 편집 문제 설명 [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 업무용 소프트웨어를 개발하는 니니즈웍스의 인턴인 앙몬드는 명령어 기반으로 표의 행을 선택, 삭제, 복구하는 프로그램을 작성하는 과제를 맡았습니다. 세부 요구 사항은 다음과 같습니다. 위 그림에서 파란색으로 칠해진 칸은 현재 선택된 행 을 나타냅니다. 단, 한 번에 한 행만 선택할 수 있으며, 표의 범위(0행 ~ 마지막 행)를 벗어날 수 없습니다. 이때, 다음과 같은 명령어를 이용하여 표를 편집합니다. "U X" : 현재 선택된 행에서 $X$칸 위에 있는 행을 선택합니다. "D X" : 현재 선택된 행에서 $X$칸 아래에 있는 행을 선택합니다. "C" : 현재 선택된 행을 삭제한 후, 바로 아래 행을 선택합니다. 단, 삭제된 행이 가장 마지막 행인 경우 바로 윗 행을 선택합니다. "Z" : 가장 최근에 삭제된 행을 원래대로 복구합니다. 단, 현재 선택된 행은 바뀌지 않습니다. 예를 들어, 위 표에서 "D 2" 를 수행할 경우 아래 그림의 왼쪽처럼 4행이 선택되며, "C" 를 수행하면 선택된 행을 삭제하고, 바로 아래 행이었던 "네오"가 적힌 행을 선택합니다. (4행이 삭제되면서 아래 있던 행들이 하나씩 밀려 올라오고, 수정된 표에서 다시 4행을 선택하는 것과 동일합니다.) 다음으로 "U 3" 을 수행한 다음 "C" 를 수행한 후의 표 상태는 아래 그림과 같습니다. 다음으로 "D 4" 를 수행한 다음 "C" 를 수행한 후의 표 상태는 아래 그림과 같습니다. 5행이 표의 마지막 행 이므로, 이 경우 바로 윗 행을 선택하는 점에 주의합니다. 다음으로 "U 2" 를 수행하면 현재 선택된 행은 2행이 됩니다. 위 상태에서 "Z" 를 수행할 경우 가장 최근에 제거된 "라이언" 이 적힌 행이 원래대로 복구됩니다. 다시한번 "Z" 를 수행하면 그 다음으로 최근에 제거된 "콘" 이 적힌 행이 원래대로 복구됩니다. 이때, 현재 선택된 행은 바뀌지 않는 점에 주의하세요. 이때, 최종 표의 상태와 처음 주어진 표의 상태를 비교하여 삭제되지 않은 행은 "O" , 삭제된 행은 "X" 로 표시하면 다음과 같습니다. 처음 표의 행 개수를 나타내는 정수 n , 처음에 선택된 행의 위치를 나타내는 정수 k , 수행한 명령어들이 담긴 문자열 배열 cmd 가 매개변수로 주어질 때, 모든 명령어를 수행한 후 표의 상태와 처음 주어진 표의 상태를 비교하여 삭제되지 않은 행은 O , 삭제된 행은 X 로 표시하여 문자열 형태로 return 하도록 solution 함수를 완성해주세요. 제한사항 $5 \leq$ n $\leq 1,000,000$ $0 \leq$ k $<$ n $1 \leq$ cmd 의 원소 개수 $\leq 200,000$ cmd 의 각 원소는 "U X" , "D X" , "C" , "Z" 중 하나입니다. $X$는 1 이상 300,000 이하인 자연수이며 0으로 시작하지 않습니다. $X$가 나타내는 자연수에 ','는 주어지지 않습니다. 예를 들어 123,456의 경우 123456으로 주어집니다. cmd 에 등장하는 모든 $X$들의 값을 합친 결과가 $1,000,000$ 이하인 경우만 입력으로 주어집니다. 표의 모든 행을 제거하여, 행이 하나도 남지 않는 경우는 입력으로 주어지지 않습니다. 본문에서 각 행이 제거되고 복귀되는 과정을 보다 자연스럽게 보이기 위해 "이름" 열을 사용하였으나, "이름" 열의 내용이 실제 문제를 푸는 과정에 필요하지는 않습니다. "이름" 열에는 서로 다른 이름들이 중복없이 채워져 있다고 가정하고 문제를 해결해 주세요. 표의 범위를 벗어나는 이동은 입력으로 주어지지 않습니다. 원래대로 복구할 행이 없을 때(즉, 삭제된 행이 없을 때) "Z" 가 명령어로 주어지는 경우는 없습니다. 정답은 표의 0행부터 $n - 1$행까지에 해당되는 O, X를 순서대로 이어붙인 문자열 형태로 return 해주세요. 정확성 테스트 케이스 제한 사항 $5 \leq$ n $\leq 1,000$ $1 \leq$ cmd 의 원소 개수 $\leq 1,000$ 효율성 테스트 케이스 제한 사항 주어진 조건 외 추가 제한사항 없습니다. 입출력 예시 n k cmd result 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" 문제 풀이 배열은 데이터를 중간에 삽입/삭제하면 효율이 좋지 못함. [0, 1, 2, 3, 4, 5, 6, 7] "D 2" k 가 2이므로 2에서 아래로 2칸 내려간다. 2 $\rightarrow$ 3 $\rightarrow$ 4 현재 값은 4이다. "C" 삭제 작업을 수행한다. [0, 1, 2, 3, 5, 6, 7] 4는 되돌릴 수 있어야 하므로 스택에 별도로 저장한다. [4] 4가 삭제되고 기준 값은 5가 된다. "U 3" 기준 값이 5이므로 위로 3칸 올라가야 한다. 5 $\rightarrow$ 3 $\rightarrow$ 2 $\rightarrow$ 1 현재 값은 1이다. "C" 삭제 작업을 수행한다. [0, 2, 3, 5, 6, 7] 1은 되돌릴 수 있어야 하므로 스택에 별도로 저장한다. [4, 1] 1이 삭제되고 기준 값은 2가 된다. "D 4" 기준 값이 2이므로 아래로 4칸 내려가야 한다. 2 $\rightarrow$ 3 $\rightarrow$ 5 $\rightarrow$ 6 $\rightarrow$ 7 현재 값은 7이 된다. "C" 삭제 작업을 수행한다. [0, 2, 3, 5, 6] 7은 되돌릴 수 있어야 하므로 스택에 별도로 저장한다. [4, 1, 7] 7이 삭제되었는데 7은 제일 밑의 표이므로 제일 밑의 표는 아래가 아니라 위로 올라가야 한다. 따라서 기준 값은 6이 된다. "U 2" 기준 값이 6이므로 위로 2칸 올라가야 한다. 6 $\rightarrow$ 5 $\rightarrow$ 3 현재 값은 3이다. "Z" 삭제된 표들을 보관한 스택에서 제일 위에 있는(제일 마지막에 넣은) 표를 꺼내서 다시 표에 넣는다. 근데, 그 값과 이전, 이후 값을 기억하고 있어야 넣을 수 있다. "7은 (이전: 6, 이후: X)" 이므로 나중에 구현할 때는 이전, 이후 값도 같이 기억하도록 해야겠다. 아무튼, 표는 아래와 같이 된다. [0, 2, 3, 5, 6, 7] 삭제 스택 [4, 1] "Z" 다시 한 번 되돌리므로 1을 복귀해준다. [0, 1, 2, 3, 5, 6, 7] [4] 이런 과정을 거쳐야 한다. 우선 전체적인 흐름은 다음과 같다. cmd 에 있는 명령어를 수행하고 삭제 스택에 있는 요소를 꺼내서 그 값이 있는 것들은 X 표시를 해서 나중에 반환하면 되는데 join 명령어를 활용해서 반환하면 될 것 같다. 그렇게 되면 배열로 관리할 수 있을 것이다. 인덱스 0 1 2 3 4 5 6 7 O O O O O O O O 이렇게 초기값을 넣어두고 삭제 스택에서 하나씩 빼면서 해당 값에 해당하는 인덱스는 X로 변경 현재 4가 삭제되어있으므로 인덱스 0 1 2 3 4 5 6 7 O O O O X O O O 이렇게 하고 join 을 이용해서 문자열로 바꿔서 반환하면 될 것이다. def solution(n, k, cmd): deleted = [] result = ["O"] * n up = [i - 1 for i in range(n)] down = [i + 1 for i in range(n)] down[-1] = -1 for c in cmd: if c == "C": up_node, down_node = up[k], down[k] deleted.append((k, up_node, down_node)) if up_node != -1: down[up_node] = down_node if down_node != -1: up[down_node] = up_node k = down_node if down_node != -1 else up_node elif c == "Z": node, up_node, down_node = deleted.pop() if up_node != -1: down[up_node] = node if down_node != -1: up[down_node] = node else: move, num = c.split() if move == "U": for _ in range(int(num)): k = up[k] else: for _ in range(int(num)): k = down[k] for node, _, _ in deleted: result[node] = "X" return "".join(result) 느낀점 어떻게 문제를 풀어야 할지 감을 잡지 못해서 제미나이에게 접근법을 물어보고 풀이를 해봤다. 파이썬 기본 리스트( list )의 함정 이건 중간 삽입/삭제 효율이 좋지 못하다는 것. 이미 알고 있었던 것이니 패스 "Z" 명령어를 위한 자료 구조 가장 마지막에 들어온 데이터부터 순서대로 꺼내야 하는 자료 구조를 쓰라는 것. 이미 스택을 쓰고자 생각하고 있었으므로 패스 결국 나의 문제는 어떤 스택을 써야 하는지는 알고 있는데 어떤 아이디어로 구현을 할지가 부족하다는 점이었다. 이 부분을 앞으로 생각하면서 구현을 할 수 있도록 노력해야 할 것 같다. [-1] 인덱싱 파이썬에서 [-1] 인덱싱은 마지막 원소 접근 기능이 작동하는 것을 막기 위한 비어있음(Null)을 나타내는 기호이다. 배열 기반으로 연결 리스트를 만들 때, 이전, 다음 노드가 없다는 의미( Null 이나 None )를 숫자로 표현하기 위해 보통 -1 을 사용한다.
velog
디스크 이미징 디지털 저장매체의 복제본인 디스크 이미지를 생성하는 과정 디지털 저장매체: 하드디스크나 SSD와 같이 데이터를 저장하는 장치를 의미 디스크 이미지: 디지털 저장매체에 저장되어 있는 디지털 데이터를 바이트 단위로 복제해서 하나의 파일로 저장한 것 디스트 이미징: 원본 디지털 저장매체에서 복제본인 디스크 이미지를 생성하는 과정 디스크 복제: 원본 저장매체와 동일한 디지털 데이터를 가지는 복사본 저장매체를 만드는 행위 복사: 파일이나 폴더 단위의 디지털 데이터를 별개의 저장매체에 복사하는 행위 메모리(RAM) 메모리는 CPU가 빠르게 연산할 수 있도록 데이터를 전달하기 위해 데이터를 임시적으로 보관하는 장소 입력장치 -키보드나 마우스와 같이 컴퓨터를 조작하는 장치 출력장치 -모니터나 스피커와 같이 조작의 결과를 확인하기 위한 장치 보조기억장치 -우리가 일반적으로 컴퓨터에 젖아한 비휘발성 데이터들을 보관하는 장소 메모리 덤프 메모리에 저장된 휘발서 데이터를 비휘발성 데이터로 저장한 데이터 메모리에 저장된 데이터는 시간의 경과에 따라 실시간으로 변하는데, 메모리 덤프를 수행한 시각에 저장되어 있는 데이터만이 메모리 덤프의 결과가 된다. 메모리 포렌식 메모리 덤프 파일에서 사용자 데이터를 찾아내어 분석하는 행위 헥스 에디터 : 파일의 내용을 16진수 형식으로 직접 보거나 편집할 수 있는 도구 해시함수 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수 MD5 SHA1 SHA256 눈사태 효과 입력 값에 주어진 작은 변화가 출력 값에서는 큰 차이를 만들어내는 현상 와일드카드 여러파일을 판꺼번에 지정할 목적으로 사용하는 기호 일반적으로 * 를 사용한다. '*.txt' txt확장자를 가지는 모든 파일 'dreamhack.*' dreamhack. 문자열이 포함된 모든 파일 MD5 해시함수에서 결과 값의 길이가 짧다는 것은 그만큼 안전성이 떨어짐을 의미하며 충돌 저항성이 낮다고 표현 SHA 현재가장 많이 사용하는 해시함수 1993년 미국 국가안보국이 설계해 NIST에 의해 표준으로 지정되어 현재까지 사용중 리틀 엔디언 작은 바이트부터 메모리에 저장하는 방식 ** 인코딩** 데이터를 정해진 규칙에 따라 특정한 형식으로 변환하는 것 ->암호화는 특별한 지식을 소유한 사람들을 제외하고는 누구든지 읽을 수 없도록 암호화 알고리즘을 이용해 암호화된 정보를 생선하는 과정 ASCII 인코딩 ASCII테이블에 따라 값을 문자로 변환하는 인코딩 Base64 인코딩 바이너리 데이터를 미리 지정된 64개의 문자를 이용해 표현하는 인코딩 방법 UTF-8 인코딩 가변길이 인코딩 방식 중 하나 현재 인터넷 사이트 및 프로그램에서 가장 많이 사용되고 있는 방식 파일 시그니처 파일의 콘텐츠를 식별하기 위해 사용되는 데이터 프로그램 입장에서 어떤 파일이 입력 값으로 주어졌을 때, 해당 파일이 어떤 형식을 가지고 있는지 쉽게 알 수 없다. 이때 시그니처를 확인한다면 해당 파일의 형식을 구별할 수 있게된다. 파일 확장자 파일의 이름에서 파일의 종류와 역할 표시 컴퓨터 구조와 저장장치 메모리(RAM) 하드디스크 데이터가 기록되어 있는 동안 동그란 플래터가 계속해서 회전하고, 바늘 모양의 헤드가 플래터로부터 데이터를 읽어오는 방식으로 동작 SSD 반도체를 사용해 데이터를 저장하는 장치 USB 플래시 드라이브 USB 표준 규격을 이용해 데이터를 저장하는 장치 SDCard USB보다 작고 가벼운 저장장치 저장장치 인터페이스 수집한 저장장치를 어떻게 연결해 데이터를 읽어올 수 있는가 IDE 과거 하드디스크 연결을 위해 제작된 표준 인터페이스 규격 SATA 직렬 전송 방식을 이용하면서 기존 IDE 방식에 비해 더 빠른 속도와 높은 안정성을 지원 PCI 컴퓨터 메인 보드에 주변 장치를 장착하기 위한 컴퓨터 버스의 일종이자 인터페이스 USB 장치와 장치를 연결하는 인터페이스의 규격이자 동시에 데이터를 전송하는 프로토콜 디지털 포렌식 도구 하드웨어 장비 디스크 이미지 장비 쓰기 방지 장치 페러데이
Балл: 54.4Уверенность: 49%
ПодробнееБалл: 54.4Уверенность: 49%
Балл: 54.4Уверенность: 49%
Балл: 54.4Уверенность: 49%