Правильно: контр-адмирал.
Словарной фиксации для этого слова нет. Но приставка контр- пишется слитно (кроме слова контр-адмирал), поэтому корректно слитное написание: контргарантия.
Дефис – это небуквенный орфографический знак, он используется в правилах слитного, дефисного и раздельного написания (контр-адмирал), как знак переноса, как знак сокращения (г-н, ж.-д.). Тире – пунктуационный знак, обозначающий различные синтаксические связи между словами («Рубин» – чемпион).
Приставка контр... пишется слитно, исключение составляет только слово контр-адмирал. Слово контроперация тоже надо писать слитно. См.: Русский орфографический словарь РАН / Под ред. В. В. Лопатина, О. Е. Ивановой. – 4-е изд., испр. и доп. – М., 2012.