Переполнение стека в LINQ к SQL и Содержит ключевое слово

Я следовал в этом посте и в этой презентации и придумал следующий набор команд gdb для OSX с исполняемым файлом x86-64, который можно загрузить с опцией -x, когда присоединение к процессу:

set $s = dyld_stub_rand
set $p = ($s+6+*(int*)($s+2))
call (void*)dlsym((void*)dlopen("myrand.dylib"), "my_rand")
set *(void**)$p = my_rand
c

Магия в команде set $p = .... dyld_stub_rand - это 6-байтовая инструкция перехода. Смещение перехода составляет dyld_stub_rand+2 (4 байта). Это $rip -относительный переход, поэтому добавьте смещение к тому, что было бы $rip в этой точке (сразу после инструкции, dyld_stub_rand+6).

Это указывает на запись таблицы символов, которая должна быть либо реальной rand, либо подпрограммой динамического компоновщика для ее загрузки (если она никогда не вызывалась). Затем он заменяется на my_rand.

Иногда GDB извлекает dyld_stub_rand из libSystem или другой разделяемой библиотеки, если это происходит, сначала выгрузите их с помощью remove-symbol-file перед выполнением других команд.

5
задан Calvin Allen 11 August 2010 в 00:38
поделиться

1 ответ

Это будет переводить.

public static IQueryable<NewsItemSummary> WithID(
    this IQueryable<NewsItemSummary> qry,
    List<Guid> Ids
)
    {
        return from newsItemSummary in qry
               where Ids.Contains(newsItemSummary.ID)
               select newsItemSummary;
    }
)

Перевод метода Contains для локальных коллекций был одной из последних функций, добавленных при разработке linq для sql для .net 3.5, поэтому в некоторых случаях вы ожидаете работы, которая этого не делает - например, перевод IList .

Также имейте в виду, что хотя LinqToSql с радостью переводит списки, содержащие огромное количество элементов (я видел это выполняют более 50 000 элементов), SQL Server будет принимать только 2100 параметров для одного запроса.

11
ответ дан 13 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

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